Является ли это ошибкой в структуре MVC
Я заметил какое-то странное поведение и хотел посмотреть, попал ли кто-нибудь еще, и если я был глупым или если это была ошибка.
Когда и URL-адрес передается в URL-адрес страницы вместе с моделью с идентификационными свойствами
В представлении отображаются разные значения для Model.Id
Пример ViewModle
public int Id { get; set; } - value 2
....
Пример контроллера
public ActionResult Index(int id)
{
// code
return View(model);
}
URL-адрес выглядит как Activity/Index/1-url id = 1
Если я введу следующее в мое представление
@Html.TextBoxFor( x => x.Id)
@Html.TextBoxFor(x => Model.Id)
@Html.TextAreaFor(x => Model.Id)
<p>@Model.Id</P>
Я получаю следующий вывод
Значение текстового поля = 1
Значение TextArea = 1
но значение
<p>
tag = 2 - Id, который я передал в представлении в моей ViewModel
Я исправил это, переименовав поле Id в моей ViewModel в TableId
Итак, мне кажется, что Id, переданный в URL-адрес, используется Textbox/Area for, и абзац находит значение, которое я передаю в свою ViewModel. Очень странно
Ответы
Ответ 1
Это поведение по дизайну - хотя, возможно, неинтуитивное вначале.
Встроенные html-помощники имеют приоритет для того, что они используют для определения значения - ModelState (которое связано с привязкой в Url) имеет приоритет над значениями модели.
Если вы вручную очистите модельное состояние (например, в своем контроллере), вы увидите, что отображаются одни и те же значения.
например.
ModelState.Clear(); //Clears all modelstate.(you can also be more specific
//and only clear specified modelstate values.
Смотрите также: ASP.NET MVCs Помощники Html Render the Wrong Value!