2010-03-03 13 views
22

Mam modelu podobnego do tego:Zwracanie EditorTemplate jako PartialView w Wynik działania - ASP.Net MVC 2

public class myModel 
{ 
    public ClassA ObjectA {get; set;} 
    public ClassB ObjectB {get; set;} 
} 

w moim głównym widoku mam tagów podobny do tego:

<div id="section1"> 
    <%=Html.EditorFor(m => m.ObjectA)%> 
</div> 
<div id="section2"> 
    <%=Html.EditorFor(m => m.ObjectB)%> 
</div> 

KlasyA i ClassB mają zdefiniowane szablony edytora.

Utworzono trochę kodu JavaScript, który wykonuje wywołanie AJAX w celu przeładowania sekcji div div. Chcę, aby metoda akcji zwróciła edytor dla ObjectA, ClassA.ascx, który znajduje się w folderze EditorTemplates.

Mam następujących w moim metody działania:

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

    return PartialView("ClassA", modelData); 
} 

To daje błąd, ponieważ nie można znaleźć widoku ClassA.

Moje rozwiązanie polegało na utworzeniu częściowego widoku w folderze Widoki o nazwie "GetData", a mój powrót renderuje widok GetData. Widok GetData ma tylko jedną linię kodu:

<%=Html.RenderForModel()%> 

Poniższe działa, ale zastanawiałem się, czy istnieje sposób na metody działania do powrotu i edytora szablonów?

Dzięki sugestiom, które możesz podać.

Odpowiedz

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

To nie działa. Nadal nie może znaleźć szablonu. Wygląda jednak na to, że przeszukał tylko lokalizację "~/EditorTemplates/ClassA.ascx", czego się nie spodziewałam. –

+4

Jednak podanie pełnej ścieżki z katalogu głównego aplikacji działa. Na przykład "~/Views/MyView/EditorTemplates/ClassA.ascx". Nie wiedziałem, że możesz to zrobić. –

+0

Czy istnieje sposób, aby widok renderował sam szablon? Powiedz, czy 'modelData' jest typu' ClassA'? – Shimmy

27

punkty bonusowe do owijania prezentów:

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

Czy kontroler (tzw powiedzmy MyController) dziedziczą CustomControllerBase, a następnie:

public ActionResult MyAction(int id) 
{ 
    return EditorFor(new MyViewModel(id)); 
} 

Kod będzie szukał "~/Views/MyController/EditorTemplates/MyViewModel.ascx".

+1

Dowolny sposób dołączania nowo utworzonego obiektu do właściwości kolekcji modelu nadrzędnego? – Shimmy

1

ten pracował dla mnie (mvc 4)

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

    return PartialView("EditorTemplates/ClassA", modelData); 
} 
Powiązane problemy