Возврат EditorTemplate как частичного представления из контроллера

Я хотел бы вернуть EditorTemplate из моего контроллера в виде частичного представления.

В настоящее время я делаю:

public ActionResult Create([Bind(Prefix="Create")]CreateViewModel model)
{
    return PartialView("~/Views/Shared/EditorTemplates/Template.cshtml", model);
}

Проблема в том, что после того, как я это сделаю, префикс Create_ исчезнет из моего поля зрения. Есть ли способ вернуть шаблон редактора в виде частичного представления и сохранить префикс?

Index.cshtml @модель IndexViewModel

@using(Html.BeginForm("Create"))
{
    @Html.EditorFor(m => m.Create, "Template")

    <input type="submit" value="Save" />
}

Я отправляю эту форму с помощью вызова AJAX. Когда я первоначально вызываю EditorFor, все поля имеют префикс Create_. Однако после того, как я отправлю форму и верну этот PartialView, префикс будет потерян.


person Dismissile    schedule 06.12.2011    source источник
comment
Почему бы вам просто не использовать EditorFor?   -  person SLaks    schedule 06.12.2011
comment
Я изначально. Я отправляю свою форму с помощью вызова AJAX, когда форма недействительна, мне нужно вернуть ее как частичное представление и заменить содержимое   -  person Dismissile    schedule 06.12.2011


Ответы (1)


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

public ActionResult Create([Bind(Prefix="Create")]CreateViewModel model)
{
    ViewData.TemplateInfo.HtmlFieldPrefix = "Create";
    return PartialView("~/Views/Shared/EditorTemplates/Template.cshtml", model);
}
person Darin Dimitrov    schedule 06.12.2011
comment
Нельзя ли сделать это и в контроллере? - person SLaks; 06.12.2011
comment
@SLaks, да, вы можете, и это отличная идея и гораздо лучшее решение, чем делать это в шаблоне. Обновлю свой пост. Спасибо. - person Darin Dimitrov; 06.12.2011
comment
Ха, я как раз собирался опубликовать ответ после того, как нашел это. На самом деле вы можете сделать это и в контроллере. - person Dismissile; 06.12.2011
comment
Я мог бы создать какой-нибудь служебный метод, который будет проверять модель в поисках атрибута Bind, если он найдет тот, у которого есть префикс, он установит префикс в это значение. - person Dismissile; 06.12.2011
comment
Дарин, мне нравятся твои ответы. Каждый раз, когда у меня возникают проблемы, я могу найти лучший ответ здесь, ваш ответ. Большое тебе спасибо) - person Ivan Korytin; 29.01.2013