使用数组来填充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[]), ListOfPotentialValuesIEnumerable<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, QuxArrayName包含值Foo, Foo, Qux, Baz

我希望下拉菜单以值Foo, Foo, Qux, Baz(分别)开始,同时仍然有选项选择Foo, Bar, Baz和Qux

我是否错过了一些简单的东西?

使用数组来填充MVC/ c#中的多个字段

不幸的是,这不起作用- 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