. NET Core MVC веб-приложение получает значение из строки запроса вместо модели - PullRequest
3 голосов
/ 12 марта 2020

Если имя свойства Model соответствует имени параметра, переданного в Action, значение, отображаемое в представлении, является значением переданного параметра.

В приведенном ниже примере веб-страница будет отображать «красный» в качестве цвета, если URL-адрес / Car / Create? Color = red. Несмотря на то, что значение для модели "Синий".

Это ожидаемое поведение?

Модель:

namespace WebApplication1.Models
{
  public class Car
  {
    public string Color { get; set; }

    public Car(string color)
    {
        Color = color;
    }
  }
}

Контроллер:

    public ActionResult Create(string color)
    {
        Car car = new Car("Blue");
        return View(car);
    }

Просмотр:

@model WebApplication1.Models.Car

@{
  ViewData["Title"] = "Create";
 }

 <h1>Create</h1>

 <h4>Car</h4>
 <hr />
 <div class="row">
     <div class="col-md-4">
         <form asp-action="Create">
             <div asp-validation-summary="ModelOnly" class="text-danger"></div>
             <div class="form-group">
                 <label asp-for="Color" class="control-label"></label>
                 <input asp-for="Color" class="form-control" />
                 <span asp-validation-for="Color" class="text-danger"></span>
             </div>
             <div class="form-group">
                 <input type="submit" value="Create" class="btn btn-primary" />
             </div>
         </form>
     </div>
 </div>

1 Ответ

1 голос
/ 12 марта 2020

Да, это не ошибка, это побочный эффект функции ModelState (с использованием привязки и проверки модели), в которой хранятся значения, полученные из запроса, поэтому в случае ошибок проверки он может отображать точное значение, введенное пользователем. Соответствующие объяснения здесь и здесь приведены для справки.

Вы можете вручную очистить ModelState:

ModelState.Clear();
...