Mik*_*owe 1 c# asp.net-mvc razor asp.net-mvc-3 asp.net-mvc-4
我需要将DropDown中的2个值传递给Action方法:
@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)
{
Run Code Online (Sandbox Code Playgroud)
ddlPeopleList参数有效,..我对DropDown列表的第一个参数有点困惑,...,它是DropDown的名称还是代码使用的Selected值?
eventID没有被传入.我在下拉列表中设置了一个断点,并且存在正确的值,它只是没有传递给方法.有没有更好的方法来实现这个?谢谢
更新:我通过这样解决了它.使用隐藏字段:
@using (Html.BeginForm("AddMemberToEvent"))
{
@Html.Hidden("eventID", Model.catID )
Run Code Online (Sandbox Code Playgroud)
Html.DropDownList的不同构造函数都是控制器动作端的模型绑定.
在操作中,我们有代码来填充List
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();
}
Run Code Online (Sandbox Code Playgroud)
在客户端,首先考虑最简单的构造函数,它有1个参数,即下拉列表的名称.
@Html.DropDownList("MovieType")
Run Code Online (Sandbox Code Playgroud)
渲染时,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>
Run Code Online (Sandbox Code Playgroud)
在这里看到select的id和name标签是MovieType,当它被发布到动作时,模型绑定器将尝试将此select的值绑定到目标绑定器对象中名为MovieType的属性.
现在考虑一点点复杂
@Html.DropDownList("dropdown", (List<SelectListItem>)ViewBag.MovieType)
Run Code Online (Sandbox Code Playgroud)
它的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>
Run Code Online (Sandbox Code Playgroud)
请注意,唯一的区别是id和name标签,它改变了模型绑定器的行为,这次它将在目标绑定对象中找到下拉列表的属性.
现在让我们看看构造函数有4个参数的最复杂的场景.
@Html.DropDownList("dropdown1", (List<SelectListItem>)ViewBag.MovieType, "Movie Type", new { xxx = "abc" })
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
id和name是dropdown1,html属性是xxx,xxx的值是abc.电影类型插入到selectlistitem集合的第一个位置,值为空.模型绑定器将尝试将dropdown1绑定到目标绑定对象.
要回答第二个问题,模型绑定器将不会从html属性中检索值,这就是未填充eventId的原因.
| 归档时间: |
|
| 查看次数: |
4372 次 |
| 最近记录: |