Как выбрать из списка в Razor? - PullRequest
1 голос
/ 06 февраля 2020

У меня есть проект в C# с использованием модели дизайна MVC. View получает 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 ]

1 голос
/ 06 февраля 2020

Единственная проблема, которую я вижу с вашим кодом, заключается в том, что значения опций не связаны с идентификаторами. Не могли бы вы проверить сгенерированный html код, связаны ли опции с идентификаторами или нет.

Чтобы устранить эту проблему, используйте:

<option value="@n.id">@n.LicensePlate</option>
1 голос
/ 06 февраля 2020

попробуйте это:

<select name="@Model.Rental.CarID">
      @{ foreach (var n in Model.AvailableCars)
          {
             <option value=n.id>n.LicensePlate</option>
          }
       }
</select>

первый знак "@" перед оператором foreach должен охватывать все остальные программные c выражения.

1 голос
/ 06 февраля 2020

Вы должны сообщить своей странице бритвы, что вы пытаетесь получить доступ к свойству 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>
0 голосов
/ 06 февраля 2020

Вам нужно написать @Model.Rental.CarID вместо Rental.ID.

И ваш код будет

<select name="@Model.Rental.CarID">
            @foreach (var n in Model.AvailableCars)
               {
                   <option value="@n.id">@n.LicensePlate</option>
               }

       </select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...