Что я неправильно понимаю, как работает Html.TextBoxFor - PullRequest
8 голосов
/ 19 февраля 2010

Я просто пытаюсь вернуться в .NET MVC с новым выпуском, и я не могу понять, как представление привязывается к DataModel.

У меня есть модель ссвойство "first_name" и в форме HTML у меня есть следующее

<%= Html.TextBox("first_name", Model.first_name)%>
<%= Html.TextBoxFor(model => model.first_name) %> 
<input type="text" name="first_name" id="first_name" class="myLabel" 
       value="<%=Model.first_name %>" />

В действии на контроллере, если я устанавливаю свойство first_name для моей модели и выполняю

mymodelObject.first_name = "Test";
return View(mymodelObject);

Что такоепричина, по которой только третье текстовое поле обнаруживает это значение first_name, а два других - нет?

Редактировать:

Я, вероятно, недостаточно объяснил это, извините.Представьте, что у меня есть 2 метода контроллера -

public ActionResult Register()
{
    Registration model = new Registration();
    model.first_name = "test";
    return View(model);
}

. При этом работает привязка.

После того, как это было отображено, я затем нажимаю кнопку в форме и пытаюсь запустить:

[HttpPost]
public ActionResult Register(Registration_ViewData model)
{
    model.first_name = "Steve";
    return View(model);
}

Я спрашиваю, почему третье, а не первые два связываются со «Стивом» как новым именем.

Ответы [ 3 ]

8 голосов
/ 19 февраля 2010

Вам нужно очистить состояние вашей модели, чтобы ваш код выглядел примерно так:

[HttpPost]
public ActionResult Register(Registration model)
{
    ModelState.Clear();
    model.first_name = "Steve";
    return View(model);
}
5 голосов
/ 19 февраля 2010

Потому что помощники HTML читают значение из ModelState, а не из модели. Чтобы изменить это поведение, вам также необходимо работать с ModelState.
(см .: Изменение свойств модели при обратной передаче )

1 голос
/ 19 февраля 2010

Это должно работать для первых двух:

<%= Html.TextBox("first_name", x => x.first_name)%>
<%= Html.TextBoxFor(model => model.first_name) %> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...