【问题标题】:Populating dropdown list with hardcoded values in .NET MVC 5在 .NET MVC 5 中使用硬编码值填充下拉列表
【发布时间】:2017-06-22 16:26:06
【问题描述】:

我有这样的课:

public class MyClass
{
     public SelectList saleRange = new SelectList(new[]
            {
                new SelectListItem {  Selected = true ,Text = "--- Select date range ---", Value = "0" },
                new SelectListItem { Selected = false, Text = "7 days", Value = "7" },
                new SelectListItem  { Selected = false, Text = "14 days", Value = "14" },
                new SelectListItem { Selected = false, Text = "21 days", Value = "21" },
                new SelectListItem  { Selected = false, Text = "30 days", Value = "30" },
            }, "Value", "Text");

}

我的行动:

   public ActionResult Index()
        { 
            var model = new MyClass();
            return View(model);
        }

视图看起来像这样:

  @Html.DropDownListFor(m => m.saleRange, (IEnumerable<SelectListItem>)Model.saleRange,new { @class= "select2" , @style = "width:95%;border-left:2px solid #eee" })

但是我收到了这个错误:

Unable to cast object of type 'ServiceStack.Html.SelectList' to type 'System.Collections.Generic.IEnumerable`1[System.Web.Mvc.SelectListItem]'.

我在这里做错了什么?如何使用硬编码值从我的视图模型中填充下拉列表?

【问题讨论】:

  • 只需删除演员表(IEnumerable&lt;SelectListItem&gt;)
  • 然后我得到一个错误:编译器错误消息:CS1503:参数 3:无法从 'ServiceStack.Html.SelectList' 转换为 'System.Collections.Generic.IEnumerable'
  • 但是,您确实需要模型上的一个属性来存储所选项目的值。 DropDownListFor() 的第一个参数应该是这样的
  • @maccettura 你的意思是一个整数值?
  • 附带说明,使用new SelectList(... 从第一个生成相同的IEnumerable&lt;SelectListItem&gt; 是毫无意义的额外开销。并且您不能对 SelectList 和绑定到的属性使用相同的属性。

标签: c# asp.net asp.net-mvc c#-4.0 asp.net-mvc-5


【解决方案1】:

将您的模型更改为以下内容(注意SelectList需要来自命名空间 System.Web.Mvc,而不是ServiceStack):

public class MyClass
{
    //You need somewhere to put the sales range thats selected
    public string SelectedSalesRange { get; set; }

    public System.Web.Mvc.SelectList SaleRange = new System.Web.Mvc.SelectList(new[]
        {
            //Note that I have removed the "Default" item
            //And the Selected=False (since the default value of a bool is false)

            new System.Web.Mvc.SelectListItem { Text = "7 days", Value = "7" },
            new System.Web.Mvc.SelectListItem  {Text = "14 days", Value = "14" },
            new System.Web.Mvc.SelectListItem { Text = "21 days", Value = "21" },
            new System.Web.Mvc.SelectListItem  { Text = "30 days", Value = "30" },
        }, "Value", "Text");

}

并将您的视图更改为:

@Html.DropDownListFor(model => model.SelectedSalesRange, SaleRange, "--- Select date range ---") 

如果您想使用 ServiceStack,那么您的问题的整个性质都是无效的,您需要编辑或提出新问题。你只问过 MVC5

【讨论】:

    【解决方案2】:

    SelectListIEnumerable&lt;SelectListItem&gt; 不同,因此无法将其强制转换为。你可以转换saleRange.Items,因为SelectList 的属性实际上是IEnumerable&lt;SelectListItem&gt;

    但是,这首先是完全没有必要的。由于saleRange 是您模型上的一个属性,它是强类型的,您不需要将其强制转换为任何东西。 SelectList 已经是可以传递到那里的有效类型,所以直接使用 saleRange

    【讨论】:

    • 嘿,克里斯,感谢您的回复,当我这样做时,我得到:编译器错误消息:CS1503:参数 3:无法从 'ServiceStack.Html.SelectList' 转换为 'System.Collections.Generic.IEnumerable'
    • 您在使用名为 ServiceStack 的第三方库吗?
    • 这是因为您使用的 SelectList 类型与 DropDownListFor 接受的类型不同。你需要System.Web.Mvc.SelectList 而不是ServiceStack.Html.SelectList。导入错误的命名空间可能只是一个错误。如果您有意使用ServiceStack 版本,那么您需要利用该库提供的任何内容来呈现他们的SelectList 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多