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)