Это ошибка в платформе 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 отображают неверное значение!

Другие вопросы по тегам