我正在尝试动态创建多个下拉列表(ASP.Net MVC项目),以便用户映射列以从CSV文件导入数据。我从CSV文件中获取列的列表,并将它们放在SelectList
中。这些是用户为每个目标选择的SourceColumns。
如果我对目标索引进行硬编码,它可以正常工作。我的意思是,如果我为每个目标索引添加一个整数属性。
但是,我需要动态创建它,所以我在我的模型中添加了一个Dictionary来保存目标名称和选定的源索引。目标只是键值对(IDictionary<string key, int? value>
),其中value
是源列的索引。
然而,使用字典我无法弄清楚如何将值返回给我的控制器。它们的键返回null值。也许这对Html助手来说是不可能的,但欢迎提出任何建议。
public class ProductionImportModel
{
public IDictionary<string, int ?> ColumnIndices { get; set; }
// plus other properties
}
model.ColumnIndices.Add("Line", null);
@foreach (var kvp in @Model.ColumnIndices)
{
@Html.DropDownList("Model.ColumnIndices[" + @kvp.Key + "].Key", (SelectList)ViewBag.SourceColumns, String.Empty, null)
}
<select id="Model_ColumnIndices_Line__Key" name="Model.ColumnIndices[Line].Key">
<option value=""></option>
<option value="0">Col1</option>
<option value="1">Col2</option>
<option value="2">Col3</option>
</select>
答案 0 :(得分:0)
解决方案对我的观点略有改动。我没有为模型装订器提供正确的信息。我使用了DropDownList For ()帮助器而不是DropDownList()。
@foreach (var kvp in @Model.ColumnIndices)
{
@Html.DropDownListFor(m => @Model.ColumnIndices[@kvp.Key], (SelectList)ViewBag.SourceColumns, String.Empty, null)
}
这意味着生成的HTML看起来像这样
<select id="ColumnIndices_Line_" name="ColumnIndices[Line]">
<option value=""></option>
<option value="0">Col1</option>
<option value="1">Col2</option>
<option value="2">Col3</option>
</select>