2010-03-03 57 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); 
} 
相關問題