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