【问题标题】:Bind Html.DropDownList with static items将 Html.DropDownList 与静态项绑定
【发布时间】:2011-07-31 09:08:39
【问题描述】:

我必须静态绑定一个Html.DropDownList 和两个项目。

Text="Yes" Value="1"
Text="No"  Value="0"

重要的是,我必须设置文本和值字段。

我该怎么做?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 html.dropdownlistfor


    【解决方案1】:

    我用过这个是正常的

            @Html.DropDownList("Status", new List<SelectListItem>
    
                     {
                        new SelectListItem{ Text="Active", Value = "1" },
                        new SelectListItem{ Text="Not-Active", Value = "0" }
                     }) 
    

    【讨论】:

    • 我希望这个回复能得到更多的支持。尽管有些人可能声称将信息从视图模型传递到视图然后返回到控制器是最佳实践,但在某些情况下您肯定不想经历所有这些麻烦。这种方法总体上的代码要少得多,因此似乎是一个更好的解决方案(更少的代码 = 更好)
    • 是的,似乎是一个更好的解决方案(更少的代码 = 更好)
    【解决方案2】:

    最好不要在视图中创建 SelectList。您应该在控制器中创建它并使用 ViewData 传递它。

    例子:

    var list = new SelectList(new [] 
    {
        new { ID = "1", Name = "name1" },
        new { ID = "2", Name = "name2" },
        new { ID = "3", Name = "name3" },
    }, 
    "ID", "Name", 1);
    
    ViewData["list"]=list;
    return View();
    

    您传递给构造函数:IEnumerable 对象、值字段、文本字段和选定值。

    在视图中:

    <%=Html.DropDownList("list",ViewData["list"] as SelectList) %>
    

    【讨论】:

    【解决方案3】:

    下面的代码假定您使用的是剃刀视图引擎,否则您需要对其进行转换。

    @{
       var listItems = new List<ListItem>();
       listItems.Add(new ListItem{Text="Yes", Value="1"});
       listItems.Add(new ListItem{Text="No", Value="0"});
    }
    
    @Html.DropDownListFor(m=>m.SelectedValue, listItem);
    

    您应该考虑在代码中创建模型而不是视图。这也是编辑器模板的理想选择。

    【讨论】:

    • 对不起,我已经尝试过您的代码,但它给出了错误 - System.Web.Mvc.HtmlHelper' 不包含 'DropDownListFor' 的定义和最佳扩展方法重载 'System .Web.Mvc.Html.SelectExtensions.DropDownListFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>, System.Collections.Generic .IEnumerable)' 有一些无效参数
    • 感谢 iaimtomisbehave 的帮助。 Sreekumar 的解决方案对我有用。
    • @Mukesh 我也遇到了同样的问题,但是将 List 更改为 List 解决了问题(至少对我而言)
    【解决方案4】:

    如果你想明确一点,那就试试

            @{
                var domainsList = new SelectList(new []
                {
                    new SelectListItem { Text = ".Com", Value = ".com", Selected = true },
                    new SelectListItem { Text = ".Shopping", Value = ".shopping"},
                    new SelectListItem { Text = ".Org", Value = ".org"},
                    new SelectListItem { Text = ".Net", Value = ".net"},
                    new SelectListItem { Text = ".AE", Value = ".ae"},
                    new SelectListItem { Text = ".Info", Value = ".info"},
                }, "Value", "Text");
            }
            @Html.DropDownList("TopLevelDomains", domainsList)
    

    【讨论】:

      【解决方案5】:

      这为我解决了:

       <td>
                  @{  var RlistItems = new List<SelectListItem>();
      
                      RlistItems.Add(new SelectListItem { Text = "Select Room Type", Value = "0" });
                      RlistItems.Add(new SelectListItem { Text = "Meeting Room", Value = "1" });
                      RlistItems.Add(new SelectListItem { Text = "Office", Value = "2" });
                      RlistItems.Add(new SelectListItem { Text = "Cafeteria", Value = "3" });
                  }
      
                      @Html.DropDownListFor(model=>model.FirstOrDefault().RoomType
      ,RlistItems,RlistItems[item.RoomType.Value].Selected=true )
              </td>

      【讨论】:

        【解决方案6】:
        <select asp-for="CountryName" asp-items=@(new List<SelectListItem> { new SelectListItem {Text="India",Value="1" } ,new SelectListItem {Text="Japan",Value="2" }} ) class="form-control">
        
        <option>SELECT COUNTRY -- </option>
        

        【讨论】:

        • 稍微解释一下会提高你的回答质量。
        • 虽然这段代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期教育价值。请edit您的答案添加解释,包括适用的限制和假设。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多