使用数组来填充MVC/ c#中的多个字段
本文关键字:字段 数组 填充 MVC | 更新日期: 2023-09-27 17:53:23
在网站上搜索,我看到了很多关于这个问题的变体,但是没有一个与这个特殊情况有关。
我试图填充多个DropDownLists的值在index i
从数组中持有字符串在我的模型。
我的模板类似(简化)如下:
@model foo
@for (int i = 0; i < Model.ArrayName.Length; i++ )
{
@Html.LabelFor(m => m.ArrayName[i], "Index " + i, new {})
@Html.DropDownListFor(m => m.ArrayName[i], Model.ListOfPotentialValues, new {})
@Html.ValidationMessageFor(m => m.ArrayName[i])
}
为了更清楚,ArrayName
是一个字符串数组(string[]
), ListOfPotentialValues
是IEnumerable<SelectListItem>
类型
模型的代码如下:
public IEnumerable<SelectListItem> ListOfPotentialValues
{
return SelectList(/* A list of Strings*/)
}
public string[] ArrayName { get; set; }
//Constructor
public foo()
{
ArrayName = new string[] {"Foo", "Foo", "Baz","Qux"};
}
视图为第一个下拉菜单发送以下HTML输出(所有下拉菜单都是一致的)
<div>
<label for="ArrayName_0_">Index 0</label>
<select id="ArrayName_0_" name="ArrayName[0]">
<option>Foo</option>
<option>Bar</option>
<option>Baz</option>
<option>Qux</option>
</select>
<span class="field-validation-valid" data-valmsg-for="ArrayName[0]" data-valmsg-replace="true"></span>
</div>
由此,您可能已经或可能没有推导出ArrayName
当然是保存我想要显示的值的数组的名称,而ListOfPotentialValues
是可以选择的值的SelectList
。值列表显示出来了,但没有设置它的值,就像我不使用数组一样。
而下拉菜单的值不填充,我能够显示它的值,如果我调用@Model.ArrayName[i]
在我的MVC模板。
更多细节:如果ListOfPotentialValues
包含Foo, Bar, Baz, Qux
ArrayName
包含值Foo, Foo, Qux, Baz
我希望下拉菜单以值Foo, Foo, Qux, Baz(分别)开始,同时仍然有选项选择Foo, Bar, Baz和Qux
我是否错过了一些简单的东西?
不幸的是,这不起作用- DropDownListFor()
在循环中使用时与其他helper的工作方式略有不同(它在CodePlex上被提出了几次问题,我不确定这是一个错误还是仅仅是helper的限制)。
您需要为您的模型定制一个EditorTemplate
,并将SelectList
作为附加视图数据传递给模板(但这在您的情况下是不合适的,因为您只有一个值类型的数组),或者您需要在每次迭代中构造一个新的SelectList
,并使用重载来设置Selected
值。例如,您的模型需要一个属性,该属性是对象的集合(不是SelectList
)
@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(Model.MyCollection, "yourValueProperty", "yourTextProperty", Model.ArrayName[i])
我认为你使用SelectList
的方式是有问题的,试试:
@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(list, null, null, Model.ArrayName[i]), new {})
不确定它是否适用于字符串列表,您可能需要将它们转换为c#对象。
http://www.codeproject.com/Questions/701424/Default-value-for-html-DropdownListFor-in-MVC-Razo