如何发送带有本机(非ASP)HTML标记的多个选择列表选项?

时间:2018-12-19 12:00:05

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

我已启用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"/>

1 个答案:

答案 0 :(得分:1)

通常,当您有一个选择时,您希望将选择的选项的值传递给后端。换句话说,您只想传递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>