模型中字典(KVP)中的多个下拉列表
本文关键字:下拉列表 KVP 字典 模型 | 更新日期: 2023-09-27 18:28:50
我正试图为用户动态创建多个下拉列表(ASP.Net MVC项目),以映射从CSV文件导入数据的列。我从CSV文件中获得列的列表,并将它们放在SelectList
中。这些是用户为每个目的地选择的SourceColumns。
如果我对目标索引进行硬编码,它可以正常工作。我的意思是,如果我为每个目标索引添加一个整数属性。
但是,我需要动态地创建它,所以我在模型中添加了一个Dictionary来保存目标名称和选定的源索引。目的地只是键值对(IDictionary<string key, int? value>
),其中value
是源列的索引。
然而,使用字典,我无法计算出如何将值返回到我的控制器。它们的键返回时为空值。也许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)
}
结果HTML
<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>
该解决方案是对我的视图的一个小更改。我没有为模型活页夹提供正确的信息。我使用了DropDownListFor()帮助程序,而不是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>