C# 从下拉列表中传入多个值

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

我需要将下拉列表中的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) 
{
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和选定字段。我通过添加一个隐藏字段找到了解决方案。