Ответ 1
return PartialView("~/EditorTemplates/ClassA.ascx", modelData);
У меня есть модель, подобная этой:
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 для перезагрузки div раздела1. Я хочу, чтобы метод action возвращал редактор ObjectA, ClassA.ascx, который находится в папке EditorTemplates.
В моем методе Action у меня есть следующее:
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("ClassA", modelData);
}
Это дает ошибку, потому что не может найти представление ClassA.
Моим решением было создать PartialView в папке Views, называемой GetData, и мое возвращение отображает представление GetData. В представлении GetData имеется только одна строка кода:
<%=Html.RenderForModel()%>
Это работает, но мне было интересно, есть ли способ возврата метода action и шаблон редактора?
Благодаря любым предложениям, которые вы можете предоставить.
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/EditorTemplates/MyViewModel.ascx".
это сработало для меня (mvc 4)
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("EditorTemplates/ClassA", modelData);
}