2017-06-22 74 views
1

我有这样一个类:填充用硬编码值下拉列表中.NET MVC 5

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]'. 

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

+0

只要将转换删除到'(IEnumerable )' – maccettura

+0

然后我得到一个错误:编译器错误消息:CS1503:参数3:无法从'ServiceStack.Html.SelectList'转换为' System.Collections.Generic.IEnumerable ' – User987

+0

但是,您的模型上确实需要存储所选项目的值的属性。这就是'DropDownListFor()'的第一个参数应该是 – maccettura

回答

2

SelectList不是IEnumerable<SelectListItem>是一样的东西,所以没有办法将它强制转换。您可以投下saleRange.Items,因为SelectList的财产实际上是IEnumerable<SelectListItem>

但是,首先这是完全不必要的。由于saleRange是模型上的一个属性,因此它是强类型的,不需要将其转换为任何内容。 SelectList已经是有效的类型,因此直接使用saleRange即可。

+0

嘿克里斯感谢您的回复,当我这样做时,我得到:编译器错误消息:CS1503:参数3:无法从'ServiceStack.Html.SelectList'转换为'System.Collections.Generic.IEnumerable ' – User987

+0

您是否使用名为ServiceStack的第三方库? – maccettura

+0

这是因为您使用的是不同于'DropDownListFor'接受的'SelectList'类型,您需要'System.Web.Mvc.SelectList'而不是'ServiceStack.Html.SelectList'。这可能仅仅是导入错误的命名空间的一个错误。如果你有意使用'ServiceStack'版本,那么你需要利用所提供的任何东西在库上呈现他们的'SelectList'版本。 –

3

模型更改为以下(注意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