Asp.net mvc 4 用for循环填充SelectList
好的,我的下拉列表过去是这样做的:Asp.net mvc 4 用for循环填充SelectList,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,好的,我的下拉列表过去是这样做的: <select id="Level" onchange="showChoice(this.value);"> <option id="0" value="0">Pick a Level</option> @for (int i =1; i <= Model.ExamplesCount; i++ ) { <option id="@i" value="@i">Le
<select id="Level" onchange="showChoice(this.value);">
<option id="0" value="0">Pick a Level</option>
@for (int i =1; i <= Model.ExamplesCount; i++ )
{
<option id="@i" value="@i">Level @i</option>
}
</select>
上面的代码是有效的,但在我硬编码所有SelectList值的地方,我希望有一个for循环来为我实现这一点。在模型中创建一个对象,该对象将包含所有需要的项,然后将其传递给视图,怎么样?例如: 在你的模型中
public class Model{
...other properties
public List<ListItemSource> myLevels { get; set; }
[Required(ErrorMessage = @"*Required")]
public string Level { get; set; }
}
在你看来:
@Html.DropDownListFor(x => x.Level,
new SelectList(Model.myLevels, "Value", "Text"))
@Html.ValidationMessageFor(model => model.Level)
其中x.Level将保存选定的值,Model.MyLevel是标高的集合。
我希望这有助于解决您的问题。在第一个示例中,您需要为select a name属性提供与属性名称匹配的属性,以便MVC绑定器可以匹配它(例如
)但我认为这种逻辑最好在控制器中完成,根据您的条件构建一个选择器
,然后将其分配给ViewBag或视图模型属性,然后@Html.DropDownListFor(m=>m.Level,ViewBag.MySelectList)
我尝试了名称属性的方法,但没有成功。我将尝试选择列表并查看它的运行情况。您的视图应该只包含与显示相关的代码。任何数据创建/选择工作都应在控制器中完成,并通过您的视图模型或ViewBag
提供。如果您有一个名为与您的属性(即ViewBag.Level)相同的ViewBag条目,其中包含SelectList
如果您只有@Html.DropDownList(“Level”),MVC将自动使用该条目
。它会将它与模型属性结合起来,为您提供所需的内容。我最终使用SelectListItem而不是ListItemSource来完成此操作。谢谢你的帮助。这并没有真正回答我原来的问题,但因为这是一个糟糕的问题,这确实解决了我的问题。我很高兴这项工作为你。这是stackoverflow的绝妙之处,每个人都可以帮助:)
public ActionResult YourAction(Model myModel)
{
var myModel = new Model
{
myLevels =methodToGetLevels()
};
return view(myModel);
}
@Html.DropDownListFor(x => x.Level,
new SelectList(Model.myLevels, "Value", "Text"))
@Html.ValidationMessageFor(model => model.Level)