Является ли это ошибкой в ​​структуре 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!