2009-08-15 10 views
6

Quando si utilizza Html.RenderPartial, viene preso il nome della vista che si desidera eseguire il rendering e viene visualizzato il contenuto in quella posizione.Come funziona Html Helper, RenderPartial? Come posso implementare un helper che possa portare il contenuto da una vista parziale?

Vorrei implementare qualcosa di simile. Vorrei di prendere il nome della vista che si desidera rendere, insieme ad alcuni altre variabili, e rendere il contenuto all'interno di un contenitore ..

Ad esempio:

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

Qualcuno sa come fare Questo?

risposta

8

Le estensioni RenderPartial sono programmate per eseguire il rendering direttamente sull'oggetto Response ... è possibile visualizzarle nel codice sorgente per loro:

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

Ciò significa che se cambi leggermente approccio, puoi probabilmente ottenere ciò che desideri. Piuttosto che aggiungendo il tutto ad una StringBuilder, si potrebbe fare qualcosa di simile:

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

Si noti che tra cui System.Web.Mvc.Html consente l'accesso ai metodi RenderPartial().

0

Perché non creare una seconda vista e hanno parziale interno che, passare Nome come Viewdata o in modello ecc ..

Qualcosa di simile:

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

Speranza che aiuta, Dan

8

Stiamo riparando questo in MVC 2. Sarà possibile chiamare Html.Partial() e ottenere il contenuto effettivo della vista come una stringa.

+0

Bello. - – womp

Problemi correlati