Я пытаюсь опубликовать часть своей модели для просмотра в другом контроллере.Я пытался сделать это следующим образом:
<% using (Html.BeginForm("Register", "User", new {createDto = Model.UserCreateDto}, FormMethod.Post))
{%>
Form code here...
<%}%>
UserCreateDto является частью моей модели, и он заполняется в этой форме.Я пытаюсь передать его в действие «Зарегистрировать» в UsersController:
[HttpPost]
public ActionResult Register(UserCreateDto createDto)
Проблема в том, что значение маршрута в действии «Регистр» является нулевым (createDto) после отправки формы.Возможно, это происходит потому, что значения маршрута прикрепляются к URL до события отправки формы (и до заполнения полей модели).
Есть ли способ сделать то, что я хочу?
ОБНОВЛЕНИЕ Вотфактический HTML-код:
<form action="/User/Register" id="form1" method="post">
<input id="UserCreateDto_Username" name="UserCreateDto.Username" type="hidden" value="" />
<input id="UserCreateDto_Password" name="UserCreateDto.Password" type="hidden" value="" />
<input id="UserCreateDto_Email" name="UserCreateDto.Email" type="hidden" value="" />
<input id="UserCreateDto_Active" name="UserCreateDto.Active" type="hidden" value="" />
<span class="field-validation-valid" id="UserCreateDto_Username_validationMessage"></span><br /><label for="UserCreateDto_Username">Имя пользователя</label><br /><input id="UserCreateDto_Username" name="UserCreateDto.Username" type="text" value="" /><br />
<span class="field-validation-valid" id="UserCreateDto_Password_validationMessage"></span><br /><label for="UserCreateDto_Password">Пароль</label><br /><input id="UserCreateDto_Password" name="UserCreateDto.Password" type="text" value="" /><br />
<span class="field-validation-valid" id="UserCreateDto_Email_validationMessage"></span><br /><label for="UserCreateDto_Email">E-mail</label><br /><input id="UserCreateDto_Email" name="UserCreateDto.Email" type="text" value="" /><br />
<input type="submit" value="Register"/>
</form>
А вот обновленный код формы:
<% using (Html.BeginForm("Register", "User", FormMethod.Post))
{%>
<%: Html.HiddenFor(userCreateDto => Model.UserCreateDto.Username) %>
<%: Html.HiddenFor(userCreateDto => Model.UserCreateDto.Password) %>
<%: Html.HiddenFor(userCreateDto => Model.UserCreateDto.Email) %>
<%: Html.HiddenFor(userCreateDto => Model.UserCreateDto.Active) %>
<%= Html.LabeledValidatedTextBoxFor(username => Model.UserCreateDto.Username, true) %>
<%= Html.LabeledValidatedTextBoxFor(password => Model.UserCreateDto.Password, true)%>
<%= Html.LabeledValidatedTextBoxFor(email => Model.UserCreateDto.Email, true)%>
<input type="submit" value="Register"/>
<%}%>
Html.LabeledValidatedTextBoxFor
- это всего лишь мой помощник HTML-кода Custon.
Вот обновленная подпись действия:
[HttpPost]
public ActionResult Register(UserCreateDto userCreateDto)
userCreateDto в этом действии все еще null.Кстати, есть ли способ не использовать скрытые поля?Они недостаточно безопасны для передачи через них регистрационной информации пользователя.