如何从剃刀列表中选择?

时间:2020-02-05 21:20:22

标签: c# model-view-controller razor

我在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>

如何修复上面的代码,使其返回参数?

4 个答案:

答案 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>