如何将多个 Html.DropDownList 选定值从 View(.aspx) 传递给 MVC 控制器的操作?
Posted
技术标签:
【中文标题】如何将多个 Html.DropDownList 选定值从 View(.aspx) 传递给 MVC 控制器的操作?【英文标题】:How to pass multiple Html.DropDownList selected values from View( .aspx ) to MVC controller's action? 【发布时间】:2012-04-08 22:22:11 【问题描述】:我需要从 MVC 视图 (.aspx) 将多个数据(可能是 2 个 html.DropDownList 的选定值)传递给 MVC 控制器操作方法。我认为它会以某种方式来自 Html.Hidden 形式,但如何?
我无法从 Html.DropDownList 中获取选定的值并将其作为 Html.Hidden("paramName", MvcStringSelectedValue) 传递给控制器的操作。
我的代码是:
based on<br />
<%: Html.DropDownList("Semester")%>
<%= Html.Hidden("strSemesterToBaseOn",returnedValueFromAbove)%>
<%: Html.ValidationSummary(true) %>
<input type="submit" value="Clone" />
<% %>
<br/><br/>
“提交”的输入标签需要写2次还是只写一次?
编辑(额外代码)
控制器的动作方法:
[HttpPost]
public ActionResult CloneSemesterData(string strSemesterToOrganize, string strSemesterToBaseOn)
.............................................................
..............................
这里(另一个控制器的方法)是填满学期值的下拉列表
public ActionResult DepartmentAdministration()
// Get list of semesters
var lr = new ListRepository();
ViewData["Semester"] = new SelectList(lr.ListSemester(3)); //this ListSemester(3) will generate the list with 3 strings ( e.g "WS 2012", "SS2010")
return View();
我在 .aspx 文件中的查看代码是:
//当radioButton ="Clone"被选中时执行
<% using (Html.BeginForm("CloneSemesterData", "CourseNeededHours"))
%>
<%= Html.DropDownList("Semester")%> // this is First drop down list box , from which selected value , I want to transfer as 1st parameter of controller's action method
<%: Html.ValidationSummary(true) %>
based On
<%= Html.DropDownList("Semester")%> //this is Second drop down list box, from which selected value, I want to transfer as 2nd parameter of controller's action method.
<input type="submit" value="Clone" />
<% %>
错误:
现在,在使用 Edit 2 修复后:它在
下给出红线因为它无法识别 ViewData["SemesterList"]...
“System.Web.Mvc.HtmlHelper 不包含 'DropDownList' 的定义和重载的最佳扩展方法 'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string,System.Collections. Generic.IEnumerable') 有一些无效参数”。
希望现在它会清楚,仍然模棱两可,到时请告诉我。
问候 乌斯曼
【问题讨论】:
请发布您需要在单击提交后调用的控制器操作以及填充您的 DropDownLists 的控制器...这样我们可以看到并纠正您在做什么;) 【参考方案1】:我不确定你在这里问什么。您不需要任何类型的隐藏字段来发布下拉列表的选定值。您的下拉列表代码一开始就无效。
通常你有这样的东西:
<%= Html.DropDownList("SemesterToOrganize", GetSemesterToOrganize()) %>
<%= Html.DropDownList("SemesterToBaseOn", GetSemesterToBaseOn()) %>
在你的控制器中:
[HttpPost]
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn)
// your code.
编辑:
根据您告诉我们的内容。您依赖 MVC 填充 DropDownList 的行为,因为您将列表添加到与下拉列表同名的 ViewData。这对你不起作用。您必须分别填充每个下拉列表。
在您的控制器中,执行以下操作:
public ActionResult MyAction ()
ViewData["SemesterList"] = // list of semesters
return View();
那么,在你看来,你有:
<%= Html.DropDownList("SemesterToOrganize", ViewData["SemesterList"]) %>
<%= Html.DropDownList("SemesterToBaseOn", ViewData["SemesterList"]) %>
然后是你的发布方法
[HttpPost]
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn)
// your code.
如果你想继续争辩说你可以按照自己的方式去做,那你就解决不了问题。每个下拉菜单都必须有自己的唯一 ID,否则将无法正确发布。解决这个问题的唯一方法是给每个它自己的唯一 ID。这会破坏下拉菜单自动获取数据的行为,因此您必须明确指定数据列表。
所以不要再争论这是问题的一个不重要的部分。它不是。这是问题的关键。
EDIT2:
根据您上面的代码:
<%= Html.DropDownList("strSemesterToOrganize", (SelectList)ViewData["Semester"]) %>
<%= Html.DropDownList("strSemesterToBaseOn", (SelectList)ViewData["Semester"]) %>
这就是你所需要的
如果你只是给我们这个,而不是争论,这会更容易解决。
【讨论】:
实际上我已经有一个填充的 Html.DropDownList smesters ("SS2012,WS2013, SS2011") 和其他 Html.DroopDownList 相同的值,我只想从两个列表中获取选定的值并将它们作为控制器动作的参数发送。就是这样!! @Usman - 你没有任何意义。在创建下拉列表之前,您无法填写它们。您使用上面的代码创建它们。当您提交表单时,他们会自动发布他们选择的值。鉴于您显示的代码,您所描述的内容是不可能的。 @Usman - 我建议你提供真实的代码,而不是一些虚构的代码,因为你提供的代码是无效的,并且没有显示你真正想要做什么。使用真实代码。 这个 DropDownList 以某种方式通过一些基于 List // Try this. Change names and put in the appropriate namespace.
//Your view
@model MvcApplication2.Models.CloneSemesterDataViewModel
@Html.LabelFor(x => x.SemesterToOrganize)
@Html.DropDownListFor(x => x.SemesterToOrganize, Model.ListofSemestersToOrganize)
--------
@Html.LabelFor(x => x.SemesterToBaseOn)
@Html.DropDownListFor(x => x.SemesterToBaseOn, Model.ListofSemestersToBaseOn)
//view model
namespace MvcApplication2.Models
public class CloneSemesterDataViewModel
public string SemesterToOrganize get; set;
public IEnumerable<SelectListItem> ListofSemestersToOrganize
get
return new List<SelectListItem> new SelectListItem Text = "SS2012" , Value = "SS2012" ;
public string SemesterToBaseOn get; set;
public IEnumerable<SelectListItem> ListofSemestersToBaseOn
get
return new List<SelectListItem> new SelectListItem Text = "SS2012", Value = "SS2012" ;
----------
Controller.
[HttpPost]
public ActionResult CloneSemesterData(CloneSemesterDataViewModel viewModel)
//viewModel.SemesterToBaseOn
//viewModel.SemesterToOrganize
// This should do the trick.
【讨论】:
视图是为 Razor 编写的。我想它可以直接转换为 aspx。 嗨,我如何将下拉列表的选定值显示到 webgrid 中?以上是关于如何将多个 Html.DropDownList 选定值从 View(.aspx) 传递给 MVC 控制器的操作?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 asp.net mvc Html.DropDownList 帮助器将自定义项添加到下拉列表的顶部?
如何通过手动赋值来使用@Html.DropDownList? [复制]
Html.DropDownList - 如何添加额外的 <option> 到列表
将 Html.DropDownList 的选定值传递给控制器