首页 > 解决方案 > 如何使用本机(非 ASP)HTML 标记发送多个选择列表选项?

问题描述

我有 Razor 生成的选择列表,启用了多个选择选项

我正在努力发送它,因为在控制器中我的Cars列表是空的,为空。

<select multiple class="form-control">
@if (Model != null)
{
    for (int i = 0; i < Model.CarsModels.Count(); i++)
    {
        var car = Model.CarsModels[i];
        if (...)
        {
            <option name="Manufacturer.Cars[@i].Name" value="@car" selected>@car</option>
        }
        else
        {
            <option name="Manufacturer.Cars[@i].Name" value="@car">@car</option>
        }
    }
}
</select>

public class Car
{
    public string Name { get; set; }
}

public class Manufacturer
{
    public List<Car> Cars { get; set; } = new List<Car>();
}

Model.CarsModels = 只是一个字符串列表。


同时这个工作正常,但它是一个输入框,而不是选择列表的选项:

<input name="Manufacturer.Cars[0].Name" class="form-control" value="default"/>

标签: c#razorasp.net-coreasp.net-core-mvc

解决方案


通常当您有一个选择时,您希望将所选选项的值传递给后端。换句话说,您想要传递的只是unique value of the option(例如:id、名称、代码等)而不是complex object itself.

因此,为了使您的代码正常工作,您需要具备以下条件:

public class ManufacturerViewModel
{
    public List<string> Cars { get; set; }
}

风景:

<select name="Cars" multiple class="form-control">
   @if (Model != null)
   {
       for (int i = 0; i < Model.CarsModels.Count(); i++)
       {
           var car = Model.CarsModels[i];
           if (...)
           {
             <option value="@car" selected>@car</option>
           }
           else
           {
              <option value="@car">@car</option>
           }
       }
   }
</select>

推荐阅读