我有一个类似这样的模型:
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。我希望操作方法返回 ObjectA 的编辑器,即 EditorTemplates 文件夹中的 ClassA.ascx。
我的 Action 方法中有以下内容:
public ActionResult GetData(int input)
{
// Process input here and create modelData
return PartialView("ClassA", modelData);
}
这会出错,因为它找不到 ClassA View 。
我的解决方案是在名为“GetData”的 Views 文件夹中创建一个 PartialView,我的返回呈现 GetData View 。 GetData View 只有一行代码:
<%=Html.RenderForModel()%>
这确实有效,但我想知道是否有一种方法可以让操作方法返回和编辑器模板?
最佳答案
礼品包装的奖励积分:
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);
}
}
让 Controller (称为 MyController)继承自 CustomControllerBase,然后:
public ActionResult MyAction(int id)
{
return EditorFor(new MyViewModel(id));
}
代码将查找“~/Views/MyController/EditorTemplates/MyViewModel.ascx”。
关于c# - 在操作结果中将 EditorTemplate 作为 PartialView 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2374046/