24

我有一个类似的模型:

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。我希望操作方法返回 EditorTemplates 文件夹中的 ObjectA、ClassA.ascx 的编辑器。

我的 Action 方法中有以下内容:

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("ClassA", modelData);
}

这会产生错误,因为它找不到 ClassA 视图。

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

<%=Html.RenderForModel()%>

这确实有效,但我想知道是否有办法让操作方法返回和编辑器模板?

4

3 回答 3

28

礼品包装奖励积分:

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”。

于 2011-01-07T17:45:42.270 回答
24
return PartialView("~/EditorTemplates/ClassA.ascx", modelData);
于 2010-03-03T18:53:51.473 回答
2

这对我有用(mvc 4

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("EditorTemplates/ClassA", modelData);
}
于 2015-05-28T06:26:42.040 回答