我有一个类似的模型:
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调用以重新加载section1 div。我希望action方法返回EditorTemplates文件夹中ObjectA,ClassA.ascx的编辑器。
我的Action方法中有以下内容:
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("ClassA", modelData);
}
这会产生错误,因为它无法找到ClassA视图。
我的解决方案是在Views文件夹中创建一个名为“GetData”的PartialView,然后我的返回呈现GetData视图。 GetData视图只有一行代码:
<%=Html.RenderForModel()%>
这确实有效,但我想知道是否有办法让一个动作方法返回并编辑模板?
答案 0 :(得分:27)
礼品包装的奖励积分:
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”。
答案 1 :(得分:24)
return PartialView("~/EditorTemplates/ClassA.ascx", modelData);
答案 2 :(得分:2)
这对我有用( mvc 4 )
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("EditorTemplates/ClassA", modelData);
}