Возвращая редакторов в качестве PartialView в результате действий
-
24-09-2019 - |
Вопрос
У меня есть модель, похожая на это:
public class myModel
{
public ClassA ObjectA {get; set;}
public ClassB ObjectB {get; set;}
}
На моем главном представлении у меня есть теги, похожие на это:
<div id="section1">
<%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
<%=Html.EditorFor(m => m.ObjectB)%>
</div>
Classa и ClassB оба имеют определенные шаблоны редактора.
Я создал какой-нибудь JavaScript, который делает вызов ajax для перезагрузки раздела1 div. Я хочу, чтобы метод действий вернуть редактор для Objecta, Classa.ascx, который находится в папке Editortemplates.
У меня есть следующее в моем методе действий:
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("ClassA", modelData);
}
Это дает ошибку, потому что она не может найти представление Classa.
Мое решение было созданию PartialView в папке Views, называемой «getData», и мое возвращение рендерирует вид GetData. Вид GetData имеет только одну строку кода:
<%=Html.RenderForModel()%>
Это работает, но мне было интересно, был ли путь к методу действия для возврата и шаблона редактора?
Решение
return PartialView("~/EditorTemplates/ClassA.ascx", modelData);
Другие советы
Бонусные баллы для упаковки подарков:
public class CustomControllerBase : Controller
{
public PartialViewResult EditorFor<TModel>(TModel model)
{
return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
}
public PartialViewResult DisplayFor<TModel>(TModel model)
{
return PartialView("DisplayTemplates/" + typeof(TModel).Name, model);
}
}
У контролера (называемого, скажем, MyController) наследует от CustomControllerBase, а затем:
public ActionResult MyAction(int id)
{
return EditorFor(new MyViewModel(id));
}
Код будет искать «~ / Views / mycontroller / Editortortemplates / myviewmodel.ascx».
Это работало для меня (MVC 4.)
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("EditorTemplates/ClassA", modelData);
}