【问题标题】:Bind <select> with multi options in ASP.Net MVC在 ASP.Net MVC 中使用多个选项绑定 <select>
【发布时间】:2017-04-04 15:26:10
【问题描述】:

我有一个表单,用户可以在其中添加某种类别并向这些类别添加一些选项。 当用户输入类别及其项目的数据时,我将它们动态添加到&lt;select&gt; 中,其中类别为&lt;optgroup&gt;,因此我可以将其绑定到某个 ViewModel 属性,用户输入后看起来像这样数据:

<select asp-for="Items">
   <optgroup label="Brands">
       <option value="Brand1">Brand1</option>
       <option value="Brand2">Brand2</option>
       <option value="Brand3">Brand3</option>
       <option value="Brand4">Brand4</option>
   </optgroup>
   <optgroup label="Something">
       <option value="Something1" selected>Something1</option>
       <option value="Something2" selected>Something2</option>
       <option value="Something3" selected>Something3</option>
       <option value="Something4" selected>Something4</option>
   </optgroup>
</select>

然后我尝试将它绑定到 ViewModel 中的 Items 属性,但我可以绑定它的唯一方法是使用 List&lt;string&gt; 类型的 Items。 这样我就失去了每个选项所属的组。 我如何将它绑定到 Dictionary&lt;string, List&lt;string&gt;&gt; 之类的东西上,我可以在其中保留我在 html 上所做的分组?

PS.:选择将是不可见的,它只是我以某种结构获取数据的一种方式,我可以在表单中提交。演示文稿将在某种标签中完成。 喜欢:

【问题讨论】:

  • 你不能。 &lt;select&gt; 仅回发其选定选项的值(并绑定到 IEnumerable&lt;string&gt;)。请求中未发送与其&lt;optgroup&gt; 相关的任何内容。
  • 除了让每个选项的value="brand__brandname" 并在控制器上处理之外,没有别的办法了吗?
  • 简答 - 否。

标签: c# asp.net asp.net-mvc razor asp.net-core


【解决方案1】:

我承认,我不确定这个答案是否完全符合您的要求,因为我很少在我的应用程序中使用 ViewModel。如果我错过了标记,我会尝试更新我的答案。

您可以从包含分组的模型中创建SelectList。在我的示例中,我有一个按国家/地区分组的“州/省”字段。

所以在我的控制器的 Create 方法中,我有:

ViewData["StateList"] = new SelectList(_context.Set<State>(), "ID", "Name", "", "CountryID");

参数在哪里:

new SelectList(IEnumerable items,
   string dataValueField,
   string dataTextField,
   object selectedValue,
   string dataGroupField)

然后我的 View 接受这个 SelectList 来自动对元素进行分组。

<select class="form-control" style="width: 200px;" asp-for="StateID" asp-items="ViewBag.StateList">
    <option>-- Select One --</option>
</select>

其中StateID 是数据库字段,ViewBag.StateList 相当于我们在控制器中创建的ViewData["StateList"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2018-10-04
    • 2013-05-01
    • 2023-04-08
    • 2020-11-29
    • 2020-09-25
    相关资源
    最近更新 更多