Asp.net mvc Html.DropdownList实际上是如何绑定的?

Asp.net mvc Html.DropdownList实际上是如何绑定的?,asp.net-mvc,razor,Asp.net Mvc,Razor,因此,我正在学习MVC/Razor,我不知道这是如何工作的 在Create方法中 ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name"); 我在这一页上有 @Html.DropDownList("GenreId", String.Empty); 这是有效的。我感到困惑的是ViewBag和对象属性之间的差异 所以我可以把第一行改成 ViewBag.x= new SelectList(db.Genres, "GenreId",

因此,我正在学习MVC/Razor,我不知道这是如何工作的

在Create方法中

ViewBag.GenreId = new SelectList(db.Genres, "GenreId", "Name");
我在这一页上有

@Html.DropDownList("GenreId", String.Empty);
这是有效的。我感到困惑的是ViewBag和对象属性之间的差异

所以我可以把第一行改成

ViewBag.x= new SelectList(db.Genres, "GenreId", "Name");

但当然它不会绑定回对象,所以当我可能不希望列表名称与对象属性的名称相同时,为字段设置下拉列表的正确方法是什么


我想我们可以直接从Request.Form对象中获取值,但是这种方法会影响模型绑定的整个过程。

dropdownlist帮助程序会在传递字符串的情况下自动搜索选择列表

  • 你的模型
  • 视袋
  • 临时数据
  • 如果创建了selectlist,则助手将呈现一个下拉列表,其中的name和id属性与传递的字符串同名

    在此过程中,助手假定id和名称与传递的字符串相同。传递的任何字符串都将填充呈现的dropdownlist的名称和id属性

    如果你使用

    @Html.DropDownList("x", String.Empty);
    
    生成的下拉列表将有name=“x”和id=“x”。您发布到的任何操作方法都将收到一个名为“x”的参数

    另一方面,如果您想区分绑定参数的名称并选择List,则可以使用DropDownList重载

    Html.DropDownList("Genres", (IEnumerable<SelectListItem>) ViewBag.GenresList)
    
    Html.DropDownList(“流派”,(IEnumerable)ViewBag.GenresList)
    
    我认为viewbag是一个动态对象,在上面问题的上下文中,viewbag.x可以达到这个目的。我尝试在控制器端设置以下内容

            Album album = db.Albums.Find(id);
            ViewBag.x = new SelectList(db.Genres, "GenreId", "Name",album.GenreId);
    
    在视图的末尾检索值时使用以下命令,我没有遇到任何问题

            @Html.DropDownList("x","Please Select a Value")
            @Html.ValidationMessageFor(model => model.GenreId)
    

    我得到了最后一条语句,我可以检索
    Request.Form[“x”]
    ,但是否有Html助手说:使用x作为下拉列表的数据源,但在选择后将selectValue绑定到属性yi如果我理解正确,您可以使用超负荷的Html.DropDownList(“Genres”,(IEnumerable)ViewBag.GenresList)
            @Html.DropDownList("x","Please Select a Value")
            @Html.ValidationMessageFor(model => model.GenreId)