【问题标题】:How to post back collection of DropDown List values to controller如何将下拉列表值的集合回发到控制器
【发布时间】:2014-08-14 20:39:23
【问题描述】:

我有以下:

查看模型

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 绑定到这很好,但是因为我可以回发任何数字,所以我不知道该怎么做。

我很高兴被告知我这样做完全错误,但实际上我试图允许在前端显示下拉列表列表。

【问题讨论】:

  • 我能问一下我在问什么不清楚吗?底部段落清楚地说明了这一点。如果没有,请说明不清楚的地方,我会尽可能澄清。

标签: asp.net-mvc asp.net-mvc-4 postback


【解决方案1】:

看看 BeginCollectionItem Html Helper。我们每天都成功地使用它来生成 Html 输入集合(无论类型如何):

https://github.com/danludwig/BeginCollectionItem

Nuget 包:https://www.nuget.org/packages/BeginCollectionItem/

【讨论】:

  • 现在看看。谢谢。
【解决方案2】:

我已经对此进行了排序,因此我发布了该主题的未来查询:

我将集合中的类更改为:

public class SelectConfigurableDataSyncOption : BaseConfigurableDataSyncOption
{
    //Added this in to track the selected option
    public string SelectedOptionValue { get; set; }
    public Dictionary<string, string> OptionValue { get; set; }
}

在我的ViewModel 中将ICollection 更改为List

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,它允许将值回发到控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多