Это ошибка или функция?
Весь приведенный ниже код упрощен для краткости и простоты репликации и на самом деле не делает ничего полезного, кроме выделения поведения.
У меня есть класс, который включает int с именем ID:
public class FooterLink
{
public int ID { get; set; }
}
В моем контроллере у меня есть Edit Actionresult, который принимает параметр с именем 'id':
public ActionResult Edit(int id)
{
return View(new FooterLink() { ID = 5 }); //notice that I am explicitly setting the ID value here.
}
в моем индексеview У меня есть ссылка на действие редактирования, в котором указан параметр 'id':
<%= Html.ActionLink("Edit", "Edit", new { id = 1 })%>
На мой взгляд, у меня есть пара текстовых полей:
<%= Html.TextBox("ID", Model.ID)%>
<%= Html.TextBox("Blah", Model.ID) %>
, которые отображают следующеев HTML:
<input id="ID" name="ID" type="text" value="1">
<input id="Blah" name="Blah" type="text" value="5">
Обратите внимание, что вход с идентификатором "ID" получает свое значение не из модели, как я говорю ... а из параметра, который был предоставлен моему ActionResult,Это поведение то же самое с Html.TextBoxFor, Html.Hidden, Html.HiddenFor и т. Д.
Что дает?
EDIT: Я хотел обновить это долговремя назад, но никогда не удосужился к этому.Причина, по которой это происходит, заключается в том, что ModelState будет иметь запись «id» со значением параметра «id» в методе, а MVC ViewEngine сначала проверяет ModelState при заполнении Html-помощников вместо Model. Чтобы обойти это, вы можете просто добавить следующую строку в свой контроллер непосредственно перед возвратом:
ModelState.Remove("id");
Теперь <% = Html.TextBox ("ID",Model.ID)%> получит значение из Model, а не ModelState.Проблема решена.