将EditorTemplate作为动作结果中的PartialView返回

Mik*_*ien 24 c# partial-views editortemplates asp.net-mvc-2

我有一个类似的模型:

public class myModel 
{
    public ClassA ObjectA {get; set;}
    public ClassB ObjectB {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在我的主视图中,我有类似这样的标签:

<div id="section1">
    <%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
    <%=Html.EditorFor(m => m.ObjectB)%>
</div>
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

这会产生错误,因为它无法找到ClassA视图.

我的解决方案是在Views文件夹中创建一个名为"GetData"的PartialView,然后我的返回呈现GetData视图.GetData视图只有一行代码:

<%=Html.RenderForModel()%>
Run Code Online (Sandbox Code Playgroud)

这确实有效,但我想知道是否有一种方法可以返回动作方法和编辑模板?

小智 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

让控制器(称为MyController)继承自CustomControllerBase,然后:

public ActionResult MyAction(int id)
{
    return EditorFor(new MyViewModel(id));
}
Run Code Online (Sandbox Code Playgroud)

代码将查找"〜/ Views/MyController/EditorTemplates/MyViewModel.ascx".

  • 有什么方法可以将新创建​​的对象附加到父模型的集合属性吗? (2认同)

Dar*_*rov 24

return PartialView("~/EditorTemplates/ClassA.ascx", modelData);
Run Code Online (Sandbox Code Playgroud)

  • 但是,从应用程序根目录提供完整路径确实有效.例如,"〜/ Views/MyView/EditorTemplates/ClassA.ascx".我不知道你能做到这一点. (4认同)