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
相关产品推荐
相关产品推荐

