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
版本。