Это ошибка в платформе MVC
Я заметил какое-то странное поведение и хотел узнать, сталкивался ли кто-нибудь еще с этим, и был ли я глупым или это была ошибка.
Когда и ID передается в URL на страницу вместе с моделью со свойствами ID
Представление отображает различные значения для 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 - идентификатор, который я передал в представление в моей ViewModel
Я исправил это, переименовав поле Id в ViewModel в TableId
Поэтому мне кажется, что идентификатор, переданный в URL, используется Textbox / Area для, и абзац находит значение, которое я передаю в мою ViewModel. Очень странно
1 ответ
Такое поведение разработано - хотя поначалу, возможно, не интуитивно.
Встроенные html-помощники имеют приоритет для того, что они используют для определения значения - ModelState (который будет получен из привязки в URL) имеет приоритет над значениями модели.
Если вы вручную очистите состояние модели (например, в вашем контроллере), вы увидите, что отображаются те же значения.
Например
ModelState.Clear(); //Clears all modelstate.(you can also be more specific
//and only clear specified modelstate values.
См. Также: HTML-помощники ASP.NET MVC отображают неверное значение!