Asp.net mvc 如何将下拉列表值的集合回发到控制器

Asp.net mvc 如何将下拉列表值的集合回发到控制器,asp.net-mvc,asp.net-mvc-4,postback,Asp.net Mvc,Asp.net Mvc 4,Postback,我有以下资料: 视图模型: 选择ConfigurableDataSyncopion: .cshtml: 我遇到的问题是将所选下拉列表的值发回控制器。对于一个普通的下拉列表,我会声明一个变量来存储该值,并将DropDownList绑定到该值,这很好,但是因为我可以发回任何数字,我不知道该怎么做 我很高兴被告知我做得完全错误,但本质上我是在尝试允许在前端显示下拉列表列表。看看BeginCollectionItem Html帮助程序。我们每天都成功地使用它来生成Html输入的集合,而不考虑类型: Nu

我有以下资料:

视图模型:

选择ConfigurableDataSyncopion:

.cshtml:

我遇到的问题是将所选下拉列表的值发回控制器。对于一个普通的下拉列表,我会声明一个变量来存储该值,并将DropDownList绑定到该值,这很好,但是因为我可以发回任何数字,我不知道该怎么做


我很高兴被告知我做得完全错误,但本质上我是在尝试允许在前端显示下拉列表列表。

看看BeginCollectionItem Html帮助程序。我们每天都成功地使用它来生成Html输入的集合,而不考虑类型:


Nuget Package:

我已设法对此进行了排序,因此我将发布帖子,以备将来查询:

我将集合中的类更改为:

public class SelectConfigurableDataSyncOption : BaseConfigurableDataSyncOption
{
    //Added this in to track the selected option
    public string SelectedOptionValue { get; set; }
    public Dictionary<string, string> OptionValue { get; set; }
}
然后将my.cshtml文件更改为使用for循环而不是foreach:


这使我可以访问Model.SelectConfigurableOptions[i].OptionValue,它允许将值发回控制器。

我可以问一下,我问的问题有多不清楚。下面一段清楚地说明了这一点。如果没有,请说明哪些地方不清楚,我会尽可能多地澄清。现在看一看。谢谢
public class BaseConfigurableDataSyncOption
{
    public string OptionText { get; set; }
    public string OptionName { get; set; }
}

public class SelectConfigurableDataSyncOption : BaseConfigurableDataSyncOption
{
    public Dictionary<string, string> OptionValue { get; set; }
}
@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>
}
public class SelectConfigurableDataSyncOption : BaseConfigurableDataSyncOption
{
    //Added this in to track the selected option
    public string SelectedOptionValue { get; set; }
    public Dictionary<string, string> OptionValue { get; set; }
}
public List<SelectConfigurableDataSyncOption> SelectConfigurableOptions { get; set; }
@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>
}