2009-08-15 15 views
6

Podczas używania Html.RenderPartial przyjmuje nazwę widoku, który chcesz wyrenderować, i renderuje zawartość w tym miejscu.Jak działa pomocnik HTML, RenderPartial? Jak mogę wdrożyć pomocnika, który może wprowadzić treść z częściowego widoku?

Chciałbym zaimplementować coś podobnego. Chciałbym, aby wziąć nazwę widoku, który chcesz uczynić, wraz z kilkoma innymi zmiennymi, a renderowanie treści w pojemniku ..

Na przykład:

public static class WindowHelper 
{ 
    public static string Window(this HtmlHelper helper, string name, string viewName) 
    { 
     var sb = new StringBuilder(); 

     sb.Append("<div id='" + name + "_Window' class='window'>"); 
     //Add the contents of the partial view to the string builder. 
     sb.Append("</div>"); 

     return sb.ToString(); 
    } 
} 

ktoś wie jak to zrobić to?

Odpowiedz

8

Rozszerzenia programu RenderPartial są programowane w celu renderowania bezpośrednio do obiektu Response ... można to zobaczyć w kodzie źródłowym:

....).Render(viewContext, this.ViewContext.HttpContext.Response.Output); 

Oznacza to, że jeśli zmienisz nieco podejście, prawdopodobnie możesz osiągnąć to, co chcesz. Zamiast dołączania wszystko do StringBuilder, można zrobić coś takiego:

using System.Web.Mvc.Html; 

public static class WindowHelper 
{ 
    public static void Window(this HtmlHelper helper, string name, string viewName) 
    { 
     var response = helper.ViewContext.HttpContext.Response; 
     response.Write("<div id='" + name + "_Window' class='window'>"); 

     //Add the contents of the partial view to the string builder. 
     helper.RenderPartial(viewName); 

     response.Write("</div>"); 
    } 
} 

Należy zauważyć, że w tym System.Web.Mvc.Html pozwala uzyskać dostęp do renderPartial() metody.

0

Dlaczego nie stworzyć drugi widok i mają częściowe wewnątrz, które przechodzą Nazwa jako ViewData lub modelu itp ..

coś takiego:

<div id='<%= ViewData["Name"] + "_Window"%>' class='window'> 
    <% Html.RenderPartial(ViewData["Name"]); %> 
</div> 

nadzieję, że pomoże, Dan

8

Naprawiamy to w MVC 2. Będziesz mógł wywołać Html.Partial() i uzyskać aktualną zawartość widoku jako ciąg znaków.

+0

Nice. - – womp