You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中不使用模型类如何传递视图下拉列表数据到控制器

在ASP.NET MVC中不使用模型类传递下拉列表数据到控制器

嘿,我来给你捋清楚怎么在ASP.NET MVC里不用模型类就把下拉列表的数据传到控制器~核心逻辑其实很简单:让视图里表单元素的name属性和控制器Action方法的参数名称完全匹配,ASP.NET MVC的模型绑定器会自动帮你把对应的值传递过去。下面一步步来实现:

第一步:控制器中准备下拉列表的数据源

你已经有了部分代码,我把它补全并整理得更清晰:

public ActionResult Isearch(string OFFICE_TYPE, string DEPARTMENT, string FILECATEGORY, string fromdate, string todate)
{
    // 办公室类型下拉列表:绑定表的OFID作为值,OFFICE_TYPE作为显示文本
    ViewBag.officetype = new SelectList(entity.TBL_OFFICETYPE.ToList(), "OFID", "OFFICE_TYPE");
    
    // 部门下拉列表:绑定DEPARTMENTCODE作为值和显示文本
    var departmentList = new SelectList(entity.TBL_DEPARTMENT.Select(r => r.DEPARTMENTCODE).ToList());
    ViewBag.department = departmentList;
    
    // 文件分类下拉列表:假设表中有FILID作为值,FILECATEGORY_NAME作为显示文本(根据你的实际表结构调整)
    var fileCategoryList = new SelectList(entity.TBL_FILECATEGORY.ToList(), "FILID", "FILECATEGORY_NAME");
    ViewBag.filecategory = fileCategoryList;

    // 如果是用户提交查询后进入这个方法,这里可以写你的筛选逻辑
    if (!string.IsNullOrEmpty(OFFICE_TYPE) || !string.IsNullOrEmpty(DEPARTMENT))
    {
        // 比如根据参数查询数据,把结果传给视图展示
    }

    return View();
}

第二步:在视图中渲染下拉列表并构建表单

在你的Isearch.cshtml视图里,用HTML辅助类或者原生标签渲染下拉列表,重点要保证每个表单元素的name属性和控制器Action的参数名完全一致:

方式一:使用Html辅助类(推荐)

@using (Html.BeginForm("Isearch", "YourControllerName", FormMethod.Get)) // 替换成你的控制器名称,提交方式可以选Get/Post
{
    <div class="form-group">
        <label>办公室类型:</label>
        @Html.DropDownList("OFFICE_TYPE", (SelectList)ViewBag.officetype, "--请选择--", new { @class = "form-control" })
    </div>

    <div class="form-group">
        <label>部门:</label>
        @Html.DropDownList("DEPARTMENT", (SelectList)ViewBag.department, "--请选择--", new { @class = "form-control" })
    </div>

    <div class="form-group">
        <label>文件分类:</label>
        @Html.DropDownList("FILECATEGORY", (SelectList)ViewBag.filecategory, "--请选择--", new { @class = "form-control" })
    </div>

    <div class="form-group">
        <label>开始日期:</label>
        <input type="date" name="fromdate" class="form-control" />
    </div>

    <div class="form-group">
        <label>结束日期:</label>
        <input type="date" name="todate" class="form-control" />
    </div>

    <button type="submit" class="btn btn-primary">查询</button>
}

方式二:原生HTML标签

如果你习惯写原生HTML,也可以这样实现:

<form action="@Url.Action("Isearch", "YourControllerName")" method="get">
    <div class="form-group">
        <label>办公室类型:</label>
        <select name="OFFICE_TYPE" class="form-control">
            <option value="">--请选择--</option>
            @foreach (var item in (SelectList)ViewBag.officetype)
            {
                <option value="@item.Value">@item.Text</option>
            }
        </select>
    </div>

    <!-- 其他下拉列表和日期输入框按同样逻辑编写,保证name和控制器参数一致 -->

    <button type="submit" class="btn btn-primary">查询</button>
</form>

第三步:控制器接收参数

你已经写好了接收参数的Action方法,只需要注意两个小细节:

  • 参数名称必须和视图中表单元素的name完全一致(大小写敏感哦)
  • 如果选择FormMethod.Post提交,记得给Action加上[HttpPost]特性:
[HttpPost]
public ActionResult Isearch(string OFFICE_TYPE, string DEPARTMENT, string FILECATEGORY, string fromdate, string todate)
{
    // 处理查询逻辑,之后返回视图即可
    return View();
}

这样用户提交表单时,ASP.NET MVC的模型绑定器会自动把下拉列表选中的值、日期输入框的值对应传递到控制器的参数里,完全不需要依赖模型类~

内容的提问来源于stack exchange,提问作者Kavitha Prabhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:50:09