C# 在ASP.Net MVC中使用多个选项绑定

C# 在ASP.Net MVC中使用多个选项绑定,c#,asp.net,asp.net-mvc,razor,asp.net-core,C#,Asp.net,Asp.net Mvc,Razor,Asp.net Core,我有一个表单,用户可以在其中添加一些类别,并为这些类别添加一些选项。 当用户输入类别及其项目的数据时,我会将它们动态添加到a中,其中类别为,因此我可以将其绑定到某个ViewModel属性,在用户输入数据后如下所示: <select asp-for="Items"> <optgroup label="Brands"> <option value="Brand1">Brand1</option> <option

我有一个表单,用户可以在其中添加一些类别,并为这些类别添加一些选项。 当用户输入类别及其项目的数据时,我会将它们动态添加到a中,其中类别为,因此我可以将其绑定到某个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属性,但唯一可以绑定它的方法是使用类型列表的项。 这样我就失去了每个选项所属的组。 我怎样才能将它绑定为一个字典,这样我就可以保留我在html上所做的分组了

注:select将是不可见的,这是我获取某种结构的数据的唯一方法,我可以以表单的形式提交。演示将以某种标记形式完成。 比如:


我承认,我不确定这个答案是否正是你所问的,因为我很少在我的应用程序中使用ViewModels。如果我答错了,我会尝试更新我的答案

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

因此,在我的控制器的创建方法中,我有:

ViewData["StateList"] = new SelectList(_context.Set<State>(), "ID", "Name", "", "CountryID");
然后,我的视图采用此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]的等效项。

您不能。A仅回发其所选选项的值并绑定到IEnumerable。请求中未发送任何与its相关的内容。除了生成每个选项的value=brand\uuuu brandname并在控制器上处理之外,没有其他方法吗?简短回答-否。
<select class="form-control" style="width: 200px;" asp-for="StateID" asp-items="ViewBag.StateList">
    <option>-- Select One --</option>
</select>