C# 从下拉列表中传入多个值
我需要将下拉列表中的2个值传递到Action方法:C# 从下拉列表中传入多个值,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Razor,我需要将下拉列表中的2个值传递到Action方法: @using (Html.BeginForm("AddMemberToEvent")) { @Html.DropDownList("ddlPeopleList", new SelectList(Model.PeopleList, "Id", "Username"), "Select: ", new { onchange = "this.form.submit();", eventID = Model.catID
@using (Html.BeginForm("AddMemberToEvent"))
{
@Html.DropDownList("ddlPeopleList",
new SelectList(Model.PeopleList, "Id", "Username"), "Select: ",
new { onchange = "this.form.submit();", eventID = Model.catID })
}
[HttpPost]
public ActionResult AddMemberToEvent(string ddlPeopleList, string eventID)
{
ddlPeopleList参数起作用。我对下拉列表的第一个参数有点困惑。,它是下拉列表的名称还是代码使用的选定值
未传入eventID。我在下拉列表中放了一个断点,正确的值就在那里,只是没有传递给方法。
有没有更好的方法来实现这一点?谢谢
更新:我通过这样做解决了这个问题。使用隐藏字段:
@using (Html.BeginForm("AddMemberToEvent"))
{
@Html.Hidden("eventID", Model.catID )
Html.DropDownList的不同构造函数完全取决于控制器操作端的模型绑定 在操作中,我们有代码来填充列表
public ActionResult Index()
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "Action", Value = "0" });
items.Add(new SelectListItem { Text = "Drama", Value = "1" });
items.Add(new SelectListItem { Text = "Comedy", Value = "2", Selected = true });
items.Add(new SelectListItem { Text = "Science Fiction", Value = "3" });
ViewBag.MovieType = items;
return View();
}
呈现时,html将被删除
<select id="MovieType" name="MovieType"><option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>
动作
戏
喜剧片
科幻小说
请参见此处,select的id和名称标记为MovieType,当它发布到操作时,模型绑定器将尝试将此select的值绑定到目标绑定器对象中名为MovieType的属性
现在考虑一个稍微复杂的一个< /P>
@Html.DropDownList("dropdown", (List<SelectListItem>)ViewBag.MovieType)
@Html.DropDownList(“dropdown”,(列表)ViewBag.MovieType)
它的html是:
<select id="dropdown" name="dropdown"><option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>
动作
戏
喜剧片
科幻小说
注意,唯一的区别是id和name标记,它改变了modelbinder的行为,这次它将在目标绑定对象中找到dropdown属性
现在让我们看看最复杂的场景,构造函数有4个参数
@Html.DropDownList("dropdown1", (List<SelectListItem>)ViewBag.MovieType, "Movie Type", new { xxx = "abc" })
@Html.DropDownList(“dropdown1”,(List)ViewBag.MovieType,“MovieType”,new{xxx=“abc”})
Html部分:
<select id="dropdown1" name="dropdown1" xxx="abc">
<option value="">Movie Type</option>
<option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>
电影类型
行动
戏
喜剧片
科幻小说
id和name是dropdown1,html属性是xxx,xxx的值是abc。电影类型插入selectlistitem集合的第一个位置,且值为空。
模型绑定器将尝试将dropdown1绑定到目标绑定对象
要回答第二个问题,模型绑定器将不会从html属性中检索值,这就是为什么不填充eventId。html.DropDownList的不同构造函数完全取决于控制器操作端的模型绑定 在操作中,我们有代码来填充列表
public ActionResult Index()
{
List<SelectListItem> items = new List<SelectListItem>();
items.Add(new SelectListItem { Text = "Action", Value = "0" });
items.Add(new SelectListItem { Text = "Drama", Value = "1" });
items.Add(new SelectListItem { Text = "Comedy", Value = "2", Selected = true });
items.Add(new SelectListItem { Text = "Science Fiction", Value = "3" });
ViewBag.MovieType = items;
return View();
}
呈现时,html将被删除
<select id="MovieType" name="MovieType"><option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>
动作
戏
喜剧片
科幻小说
请参见此处,select的id和名称标记为MovieType,当它发布到操作时,模型绑定器将尝试将此select的值绑定到目标绑定器对象中名为MovieType的属性
现在考虑一个稍微复杂的一个< /P>
@Html.DropDownList("dropdown", (List<SelectListItem>)ViewBag.MovieType)
@Html.DropDownList(“dropdown”,(列表)ViewBag.MovieType)
它的html是:
<select id="dropdown" name="dropdown"><option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>
动作
戏
喜剧片
科幻小说
注意,唯一的区别是id和name标记,它改变了modelbinder的行为,这次它将在目标绑定对象中找到dropdown属性
现在让我们看看最复杂的场景,构造函数有4个参数
@Html.DropDownList("dropdown1", (List<SelectListItem>)ViewBag.MovieType, "Movie Type", new { xxx = "abc" })
@Html.DropDownList(“dropdown1”,(List)ViewBag.MovieType,“MovieType”,new{xxx=“abc”})
Html部分:
<select id="dropdown1" name="dropdown1" xxx="abc">
<option value="">Movie Type</option>
<option value="0">Action</option>
<option value="1">Drama</option>
<option selected="selected" value="2">Comedy</option>
<option value="3">Science Fiction</option>
</select>
电影类型
行动
戏
喜剧片
科幻小说
id和name是dropdown1,html属性是xxx,xxx的值是abc。电影类型插入selectlistitem集合的第一个位置,且值为空。
模型绑定器将尝试将dropdown1绑定到目标绑定对象
回答第二个问题,模型绑定器不会从html属性中检索值,这就是为什么不填充eventId。eventId是一个HtmlAttribute,据我所知,它不会传递回控制器。看起来与这里的问题类似:另外,您能否解释一下,当下拉列表只有一个选定值时,为什么要返回多个值?我需要在方法中传递两个参数。EventID是一个HtmlAttribute,据我所知,它不会传递回控制器。看起来与这里的问题类似:另外,您能否解释一下,当下拉列表只有一个选定值时,为什么要返回多个值?我需要在方法中传递两个参数。感谢您的解释。。因此,第一个参数兼作名称/id和选定字段。我通过添加一个隐藏字段找到了解决方案。感谢您的解释。。因此,第一个参数兼作名称/id和选定字段。我通过添加一个隐藏字段找到了解决方案。