2010-03-03 64 views
22

我有一个类似的模式:在动作结果返回的EditorTemplate作为PartialView - ASP.Net MVC 2

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的编辑器。

我有我的行动方法如下:

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

    return PartialView("ClassA", modelData); 
} 

这给出了一个错误,因为它找不到ClassA的视图。

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

<%=Html.RenderForModel()%> 

这并不工作,但我想知道如果有一个动作方法返回和编辑模板的方法吗?

感谢您提供的任何建议。

回答

23
return PartialView("~/EditorTemplates/ClassA.ascx", modelData); 
+0

这是行不通的。它仍然无法找到模板。但是,它似乎只搜索了“〜/ EditorTemplates/ClassA.ascx”的位置,我并不期待。 – 2010-03-03 20:33:11

+4

但是,从应用程序根目录给出完整路径确实有效。例如,“〜/ Views/MyView/EditorTemplates/ClassA.ascx”。我不知道你可以做到这一点。 – 2010-03-03 20:37:40

+0

有没有办法让视图呈现模板本身?说'modelData'是'ClassA'类型吗? – Shimmy 2013-05-02 00:36:36

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)); 
} 

的代码将寻找“〜/查看/ myController的/ EditorTemplates/MyViewModel.ascx”。

+1

任何方式将新创建的对象附加到父模型的集合属性? – Shimmy 2013-05-02 00:56:21

1

这个工作对我来说(MVC 4

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

    return PartialView("EditorTemplates/ClassA", modelData); 
} 
相关问题