ASP.NET MVC MODELBINDER ошибка: переменная запроса привязки «ID» для свойства модели «ID»
-
27-10-2019 - |
Вопрос
Я использую MVC 3 Final RTM.
Данный
Этот маршрут:
context.MapRoute(
"Blog_Posts",
"Blog/Posts/{id}/{slug}",
new { controller = "Posts", action = "Index", slug = UrlParameter.Optional }
);
И на странице сообщения, например, блог/posts/2/some-slug я связываю частичное представление с Comment
модель:
@Html.Partial("_CommentEditor", new Comment())
А также Comment
имеет public int Id {get; set;}
.
И с частичного взгляда у меня есть:
@Html.HiddenFor(comment => comment.Id)
Почему это отображает это?
<input type="hidden" value="2" name="Id" id="Id" data-val-required="The Id field is required." data-val-number="The field Id must be a number." data-val="true">
И почему, когда я меняю Id
на Comment
к CommentId
правильно ли это имеет значение 0
?
Я думаю, что модель по умолчанию связует {id}
маршрута.
Решение
Это происходит потому, что когда вы используете HTML -помощников, таких как скрытые для, они сначала смотрят на данные маршрута и состояние модели и после этого в модели. Таким образом, они находят в данных вашего маршрута идентификатор параметра = 2 и используют это значение вместо идентификатора = 0 в модели, которую вы проходите.
Другие советы
Это ошибка, или это не может быть из -за реализованной логики;
В ASP.NET MVC используется двигатель просмотра ViewData (Это переменная, а его тип - «ViewDataDictionary»). И это ViewData имеет 2 свойства "ModelState", который содержит значения маршрутизации, и «модель», которая содержит наш фактический объект модели.
- Двигатель View смотрит на объект «модели», получающий ценность свойства.
- Если найдено на шаге 1, то возвращает значение.
- Весе смотрит в объект «модели», чтобы получить значение для свойства.
В вышеприведенном случае маршрут имеет свойство «ID», а его значение сохраняется в «модели», поэтому он возвращает значение из «модели» вместо модели BENG.
Для приведенного выше сценария любой входной элемент управления рендерирует с неожиданным значением.
Резолюция:
<div class="postData" value='@Model.Id'/>
//use below jquery function to retrieve data
var postedData = $('.postData');
Если вы используете LINQ для SQL, поля, помеченные в соответствии с базой данных, не могут быть установлены вручную.
Пытаться:
Try @Html.Partial("_CommentEditor", new Comment{Id = 0})