【问题标题】:Binding DropDownList into MVC View将 DropDownList 绑定到 MVC 视图中
【发布时间】:2012-10-20 03:46:41
【问题描述】:

从这里阅读:ASP.NET MVC

Action SelectCategory 已在控制器内部创建 -

 public ActionResult SelectCategory() {

     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 });    

     ViewBag.MovieType = items;

     return View();    
 }

我无法理解下一行中的数据绑定。

@Html.DropDownList("MovieType")

虽然以类似的方式绑定数据,

@Html.DropDownList("IdList");

我收到以下错误-

没有“IEnumerable”类型的 ViewData 项 有键“IdList”。

控制器动作

public ActionResult SelectId()
    {
        List<SelectListItem> items = new List<SelectListItem>();
        items.Add(new SelectListItem { Text = "MyId1", Value = "MyId1", Selected=true });
        items.Add(new SelectListItem { Text = "MyId2", Value = "MyId2" });

        ViewBag.IdList = items;
        return View();
    }

我错过了什么?感谢您的帮助!

【问题讨论】:

  • 一切似乎都很好。也许你应该试试@Html.DropDownList(ViewBag.IdList);
  • Html.DropDownList 有 8(八)个重载,允许您指定所有内容,包括要在选项中显示的列表。请在此处查看 Html.DropDownList 的文档
  • 试试这个 Html.DropDownList("anyname",ViewBag.IdList) - 这个构造函数接受两个参数 - 名称和你想要显示的列表

标签: asp.net-mvc


【解决方案1】:

您已设置ViewBag.MovieType => 当您使用@Html.DropDownList("MovieType") 时,下拉菜单将使用此值。当您编写@Html.DropDownList("IdList") 时,助手在ViewBag 中找不到对应的IdList 属性并抛出错误,因为它不知道从哪里绑定数据。

或者,如果您想更改下拉列表的名称,您可以使用以下内容:

@Html.DropDownList("SelectedMovieType", (IEnumerable<SelectListItem>)ViewBag.MovieType)

您的 POST 操作将有一个 SelectedMovieType 参数来检索选定的值。

但我会避免使用 ViewBag。定义视图模型更好:

public class MyViewModel
{
    public string SelectedMovieType { get; set; }
    public IEnumerable<SelectListItem> MovieTypes { get; set; }
}

然后让您的控制器操作填充此视图模型并将其传递给视图:

public ActionResult SelectId()
{
    List<SelectListItem> items = new List<SelectListItem>();
    items.Add(new SelectListItem { Text = "MyId1", Value = "MyId1", Selected=true });
    items.Add(new SelectListItem { Text = "MyId2", Value = "MyId2" });

    var model = new MyViewModel
    {
        MovieTypes = items    
    };

    return View(model);
}

在您的强类型视图中:

@model MyViewModel
@Html.DropDownListFor(x => x.SelectedMovieType, Model.MovieTypes)

【讨论】:

    【解决方案2】:

    在将您的列表绑定到 DropDown 时,您需要在使用 @Html.DropDown 控件时将其类型强制转换为 IEnumerable,该控件不是使用模型强类型

    在视图中

    @Html.DropDownList("MovieType",(IEnumerable<SelectListItem>)ViewBag.MovieType) 
    

    如果你绑定 IdList 则另一种方式

    @Html.DropDownList("IdList",(IEnumerable<SelectListItem>)ViewBag.IdList)
    

    【讨论】:

    • 嗨 Shivkumar,上面的代码抛出错误:There is no ViewData item of type 'IEnumerable&lt;SelectListItem&gt;' that has the key 'IdList'. 有什么建议吗?
    • @autrevo 你能告诉我一些错误的快照吗,因为我无法在这里重现它
    【解决方案3】:

    数据绑定将数据绑定到模型的一种无痛方式:Dropdown不要使用剃须刀。手动绑定,用FormCollection对象获取。

    控制器:

     [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Sorun sorun,FormCollection fc)
        {
            //Define independently as form collection
    
            sorun.GonderilecekBirim = fc["GonderilecekBirim"];
            sorun.IlkSorulmaTarihi = DateTime.Now;
            if (ModelState.IsValid)
            {
    
                db.Soruns.Add(sorun);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
    
            return View(sorun);
        }
    

    查看

    @Html.LabelFor(model => model.GonderilecekBirim, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <!-- Define as raw html -->
                <select id="GonderilecekBirim" name="GonderilecekBirim">
                    <option value="4">Satın Alma</option>
                    <option value="5">Muhasebe</option>
                </select>
    
                @*@Html.ValidationMessageFor(model => model.GonderilecekBirim, "", new { @class = "text-danger" })*@
            </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      • 2013-06-21
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多