我在C#
中有一个使用MVC
设计模型的项目。
视图从Controller接收到ViewModel,其中包含可用汽车的列表,并且用户应该能够从下拉列表中选择一个。
<div>
<text>Choose car</text>
<select name="Rental.CarID">
@{ foreach (var n in Model.AvailableCars)
{
<option value="n.id">@n.LicensePlate</option>
}
}
</select>
</div>
但是参数Rental.CarID
的返回值为空。
如果我这样手动输入rental.CarID
,它将起作用:
<div>
<text>Choose Car</text>
<input type="number" name="Rental.CarID" />
</div>
如何修复上面的代码,使其返回参数?
答案 0 :(得分:1)
您需要让您的剃须刀页面知道您正在尝试访问Model
属性。表示法很简单:
<select name="@Model.Rental.CarID">
@{ foreach (var n in Model.AvailableCars)
{
<option value="@n.id">@n.LicensePlate</option>
}
}
</select>
此外,包含foreach
的代码块是多余的。您可以简单地写:
@foreach (var n in Model.AvailableCars)
{
<option value="@n.id">@n.LicensePlate</option>
}
结果:
<select name="@Model.Rental.CarID">
@foreach (var n in Model.AvailableCars)
{
<option value="@n.id">@n.LicensePlate</option>
}
</select>
答案 1 :(得分:1)
我在您的代码中看到的唯一问题是,选项值与ID没有关联。您能否检查生成的html代码,选项是否与ID相关联。
要解决该问题,请使用此:
<option value="@n.id">@n.LicensePlate</option>
答案 2 :(得分:1)
尝试:
<select name="@Model.Rental.CarID">
@{ foreach (var n in Model.AvailableCars)
{
<option value=n.id>n.LicensePlate</option>
}
}
</select>
在foreach语句之前的第一个“ @”应该覆盖其余的程序化表达式。
答案 3 :(得分:0)
您需要输入@Model.Rental.CarID
而不是Rental.ID。
您的代码将是
<select name="@Model.Rental.CarID">
@foreach (var n in Model.AvailableCars)
{
<option value="@n.id">@n.LicensePlate</option>
}
</select>