C# 使用数组用MVC/C填充多个字段

C# 使用数组用MVC/C填充多个字段,c#,arrays,asp.net-mvc,C#,Arrays,Asp.net Mvc,通过搜索这个网站,我看到了这个问题的很多变化,但没有一个与这个特定的案例相关 我试图用索引I处的值填充多个DropDownLists,该值来自一个在我的模型中保存字符串的数组 我的模板类似于以下内容: @model foo @for (int i = 0; i < Model.ArrayName.Length; i++ ) { @Html.LabelFor(m => m.ArrayName[i], "Index " + i, new {}) @Html.Drop

通过搜索这个网站,我看到了这个问题的很多变化,但没有一个与这个特定的案例相关

我试图用索引I处的值填充多个DropDownLists,该值来自一个在我的模型中保存字符串的数组

我的模板类似于以下内容:

@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])
}
视图为第一个下拉列表发送以下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。显示了值列表,但没有像不使用数组那样设置其值

虽然下拉列表的值没有填充,但是如果我在MVC模板中调用@Model.ArrayName[I],我就能够显示它的值

更多详情: 如果潜在值列表包含值Foo、Bar、Baz、Qux ArrayName包含值Foo、Foo、Qux、Baz

我希望下拉列表分别以值Foo、Foo、Qux、Baz开始,同时仍然可以选择Foo、Bar、Baz和Qux


是否有我遗漏的简单内容?

我认为您使用SelectList的方式有问题,请尝试:

@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(list, null, null, Model.ArrayName[i]), new {})
不确定它是否可以处理字符串列表,您可能需要将这些字符串转换为C对象


不幸的是,这不起作用-当在循环中使用DropDownListFor时,它的工作方式与其他帮助程序略有不同。它在CodePlex上被多次作为一个问题提出,我不确定这是一个bug还是仅仅是帮助程序的一个限制

您需要为您的模型创建一个自定义编辑器或模板,并将SelectList作为附加视图数据传递给模板,但这不适合您的情况,因为您只有一个值类型数组,或者您需要在每次迭代中构造一个新的SelectList,并使用设置选定值的重载。例如,您的模型需要一个属性,该属性是对象的集合,而不是SelectList


ArrayName的类型是什么?潜在价值清单?你能提供一个被输出的HTML的例子吗?我相信这个编辑满足了你的要求。我不确定这是不是真的。在问题中,我声明将显示值列表,但不会像不使用数组那样设置其值。也就是说,在我使用字符串[]之前,字段已填充。当我转到阵列版本时,问题就出现了。这个答案在解释错误方面做得更好
@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(list, null, null, Model.ArrayName[i]), new {})
@Html.DropDownListFor(m => m.ArrayName[i], new SelectList(Model.MyCollection, "yourValueProperty", "yourTextProperty", Model.ArrayName[i])