Привязать модель обратно при отображении с помощью шаблона DisplayFor - PullRequest
0 голосов
/ 21 октября 2010

У меня есть модель

public class PersonViewModel
{
    public Guid Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
}

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

public class ApprovalModel
{
    [UIHint("MyDisplayTemplate")]
    public PersonViewModel User { get; set; }

    [Required]
    public bool? Approve { get; set; }
}

Под Views -> Shared -> DisplayTemplates У меня есть шаблон MyDisplayTemplate.ascx

В моем представлении ApprovalModel я использую следующую строку, которая отображает вложенную модель:

<div class="display-field"> <%: Html.DisplayFor(model => model.User) %> </div>

И в моем контроллере у меня есть действие

[HttpPost]
public virtual ActionResult ApproveRequest(ApprovalModel vm)
{
    //access bound vm.User  here
}

Есть ли простой способ связать вложенную модель обратно с пост-запросом? Или что еще я могу сделать, чтобы связать его обратно?

спасибо

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

Сохраните модель представления в сеансе и визуализируйте идентификатор как скрытое поле.После этого ваше действие после публикации может извлечь модель из сеанса или загрузить ее по идентификатору, если ее там нет.:

[HttpPost]
public virtual ActionResult ApproveRequest(int id)
{
    //access bound vm.User  here
}
2 голосов
/ 21 октября 2010

Вам нужны поля ввода в шаблоне дисплея:

<%: Html.HiddenFor(x => x.Id) %>
<%: Html.LabelFor(x => x.Firstname) %>
<%: Html.TextBoxFor(x => x.Firstname) %>
<br/>
<%: Html.LabelFor(x => x.Lastname) %>
<%: Html.TextBoxFor(x => x.Lastname) %>

А в действии вашего контроллера укажите префикс пользователя, чтобы связыватель модели мог правильно распознавать значения запроса и связывать их с ApprovalModel.

[HttpPost]
public ActionResult ApproveRequest([Bind(Prefix = "User")] ApprovalModel vm)

Также шаблоны редактора кажутся более подходящими (<%: Html.EditorFor(model => model.User) %>) для создания форм и полей ввода вместо шаблонов отображения.

1 голос
/ 21 октября 2010

Вам не нужно помещать файлы в текстовые поля, вам просто нужно поместить их в некоторые поля ввода, поэтому, когда страница отправляется обратно, эти значения отправляются обратно на сервер. Поэтому просто используйте HiddenFor (....) для каждого поля, которое вы хотите восстановить на пост обратно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...