C# 用.NET MVC 5中的硬编码值填充下拉列表

C# 用.NET MVC 5中的硬编码值填充下拉列表,c#,asp.net,asp.net-mvc,c#-4.0,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,C# 4.0,Asp.net Mvc 5,我有一门课是这样的: public class MyClass { public SelectList saleRange = new SelectList(new[] { new SelectListItem { Selected = true ,Text = "--- Select date range ---", Value = "0" }, new SelectListItem { Sel

我有一门课是这样的:

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

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

   public ActionResult Index()
        { 
            var model = new MyClass();
            return View(model);
        }
视图如下所示:

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

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

我做错了什么?如何用硬编码的值填充viewmodel中的dropdownlist???

SelectList
IEnumerable
不同,因此无法将其转换为该值。您可以强制转换
saleRange.Items
,因为
SelectList
的属性实际上是一个
IEnumerable


然而,首先,这是完全没有必要的。由于
saleRange
是您模型上的一个属性,因此它是强类型的,您不需要将其强制转换为任何内容
SelectList
已经是一个有效的传递类型,所以直接使用
saleRange

SelectList
IEnumerable
不同,因此无法将其转换为该类型。您可以强制转换
saleRange.Items
,因为
SelectList
的属性实际上是一个
IEnumerable


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

将您的模型更改为以下格式(请注意,
SelectList
需要来自命名空间
,而不是
ServiceStack
):

并将您的视图更改为:

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

如果要使用ServiceStack,则问题的全部性质无效,需要编辑或提出新问题。您只询问了MVC5

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

并将您的视图更改为:

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

如果要使用ServiceStack,则问题的全部性质无效,需要编辑或提出新问题。您只询问了MVC5

只需删除对
(IEnumerable)
的强制转换,然后我得到一个错误:编译器错误消息:CS1503:参数3:无法从“ServiceStack.Html.SelectList”转换为“System.Collections.Generic.IEnumerable”。但是,您的模型上确实需要一个存储所选项值的属性。这就是
DropDownListFor()
的第一个参数的作用be@maccettura你的意思是像一个整数值一样?作为旁注,使用
new SelectList的额外开销是毫无意义的(…
从第一个属性生成相同的
IEnumerable
。并且不能对SelectList和绑定到的属性使用相同的属性。只需删除对
的强制转换(IEnumerable)
然后我得到一个错误:编译器错误消息:CS1503:参数3:无法从“ServiceStack.Html.SelectList”转换为“System.Collections.Generic.IEnumerable”。但是,您的模型上确实需要一个属性来存储所选项的值。
DropDownListFor()的第一个参数就是这个参数
应该是be@maccettura你的意思是像一个整数值一样?作为旁注,使用
new SelectList的额外开销是毫无意义的(…
从第一个生成相同的
IEnumerable
。并且您不能对SelectList和绑定到的属性使用相同的属性。嘿,Chris,感谢您的回复,当我这样做时,我得到:编译器错误消息:CS1503:参数3:无法从“ServiceStack.Html.SelectList”转换为“System.Collections.Generic.IE”numerable“您使用的是名为ServiceStack的第三方库吗?这是因为您使用的
SelectList
类型与
DropDownListFor
接受的类型不同。您需要
System.Web.Mvc.SelectList
而不是
ServiceStack.Html.SelectList
。这可能是导入错误nam的错误espace.如果您有意使用
ServiceStack
版本,那么您需要利用该库提供的任何内容来呈现其
SelectList
版本。嘿,克里斯,谢谢您的回复,当我这样做时,我得到:编译器错误消息:CS1503:参数3:无法从“ServiceStack.Html.SelectList”转换为“Sys”tem.Collections.Generic.IEnumerable'您是否使用名为ServiceStack的第三方库?这是因为您使用的
SelectList
类型与
DropDownListFor
所接受的类型不同。您需要
System.Web.Mvc.SelectList
而不是
ServiceStack.Html.SelectList
。这可能只是一个错误om导入错误的命名空间。如果您有意使用
ServiceStack
版本,则需要利用该库提供的任何内容来呈现其
SelectList
版本。