我有以下内容:
查看模型:
public ICollection<SelectConfigurableDataSyncOption> SelectConfigurableOptions { get; set; }
SelectConfigurableDataSyncOption :
public class BaseConfigurableDataSyncOption
{
public string OptionText { get; set; }
public string OptionName { get; set; }
}
public class SelectConfigurableDataSyncOption : BaseConfigurableDataSyncOption
{
public Dictionary<string, string> OptionValue { get; set; }
}
.cshtml:
@foreach (SelectConfigurableDataSyncOption option in Model.SelectConfigurableOptions)
{
<div class="span6">
<h4>@option.OptionText?</h4>
<p>@Html.DropDownListFor(m => {WHAT TO DO}, new SelectList(option.OptionValue, "Key", "Value"), new { @class = "m-wrap span12" })</p>
</div>
}
我遇到的问题是将所选下拉列表的值发布回控制器。使用正常的下拉列表,我会声明一个变量来存储该值并将DropDownList绑定到那个没问题,但因为我可以回发任何数字,我不知道该怎么做。
我很高兴被告知我这样做完全错了,但实际上我试图允许在前端显示下拉列表列表。
答案 0 :(得分:0)
看一下BeginCollectionItem Html Helper。我们每天都成功地使用它来生成一组Html输入(无论类型如何):
https://github.com/danludwig/BeginCollectionItem
Nuget Package:https://www.nuget.org/packages/BeginCollectionItem/
答案 1 :(得分:0)
我已设法对此进行排序,因此我会发布此主题的未来查询:
我将集合中的课程改为:
public class SelectConfigurableDataSyncOption : BaseConfigurableDataSyncOption
{
//Added this in to track the selected option
public string SelectedOptionValue { get; set; }
public Dictionary<string, string> OptionValue { get; set; }
}
将ICollection
中的List
更改为ViewModel
:
public List<SelectConfigurableDataSyncOption> SelectConfigurableOptions { get; set; }
然后将我的.cshtml
文件更改为使用for
循环而不是foreach
:
@for (int i = 0; i < Model.SelectConfigurableOptions.Count; i++)
{
<div class="span6">
<h4>@Model.SelectConfigurableOptions[i].OptionText?</h4>
<p>@Html.DropDownListFor(m => Model.SelectConfigurableOptions[i].SelectedOptionValue, new SelectList(Model.SelectConfigurableOptions[i].OptionValue, "Key", "Value"), new { @class = "m-wrap span12" })</p>
</div>
}
这使我可以访问Model.SelectConfigurableOptions[i].OptionValue
,允许值回发给控制器。