从下拉列表中传入多个值

本文关键字:下拉列表 | 更新日期: 2023-09-27 18:04:02

我需要从下拉菜单传递两个值到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) 
{

ddlPeopleList参数有效。我有点困惑的第一个参数是什么下拉列表,…,它是下拉列表的名称或它是由代码使用的选定值?

没有传入eventID。我在下拉列表中放了一个断点正确的值在那里,只是没有传递给方法。是否有更好的方法来实现这一点?由于

更新:我通过这样做解决了它。使用隐藏字段:

 @using (Html.BeginForm("AddMemberToEvent"))
            {
                @Html.Hidden("eventID", Model.catID )

从下拉列表中传入多个值

不同的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();
        }

在客户端,首先考虑最简单的构造函数,它有一个参数,即下拉列表的名称。

@Html.DropDownList("MovieType")

呈现时,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>

看到这里选择的id和名称标签是MovieType,当它被发送到动作时,模型绑定器将尝试将这个选择的值绑定到目标绑定器对象中名为MovieType的属性。

现在考虑一个有点复杂的

@Html.DropDownList("dropdown", (List<SelectListItem>)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标签,它改变了模型绑定器的行为,这一次它会在目标绑定对象中找到下拉列表的属性。

现在让我们看看构造函数有4个参数的最复杂的场景。

@Html.DropDownList("dropdown1", (List<SelectListItem>)ViewBag.MovieType, "Movie Type", 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和名称为dropdown1, HTML属性为XXX, XXX的值为abc。Movie Type被插入到seleclistitem集合的第一个位置,值为空。模型绑定器将尝试将dropdown1绑定到目标绑定对象。

要回答第二个问题,模型绑定器将不会从html属性中检索值,这就是为什么没有填充eventId的原因。