2010-01-18 24 views
20

Ho un'estensione HtmlHelper che attualmente restituisce una stringa utilizzando un generatore di stringhe e una discreta quantità di logica complessa. Ora voglio aggiungere qualcosa in più ad esso che è tratto da un render nominativo parziale, qualcosa di simile ...ASP.NET MVC Utilizzo del rendering parziale da un helper HTML

public static string MyHelper(this HtmlHelper helper) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("Hi There"); 
    builder.Append(RenderPartial("MyPartialView")); 
    builder.Append("Bye!"); 
    return builder.ToString(); 
} 

Ora, naturalmente, RenderPartial rende direttamente alla risposta, in modo tale doesn; lavoro t e ho ho provato diverse soluzioni per il rendering dei partial alle stringhe, ma il tutto sembra caderci sopra. Io uso HtmlHelper all'interno di quel partial.

È possibile?

risposta

67

Poiché questa domanda, anche se con risposta vecchia e contrassegnata, è stata visualizzata in google, fornirò una risposta diversa.

In asp.net mvc 2 e 3, c'è un metodo Html.Partial (...) che funziona come RenderPartial ma restituisce la vista parziale come una stringa invece di renderla direttamente.

Il vostro esempio diventa così:

//using System.Web.Mvc.Html; 
public static string MyHelper(this HtmlHelper helper) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("Hi There"); 
    builder.Append(helper.Partial("MyPartialView")); 
    builder.Append("Bye!"); 
    return builder.ToString(); 
} 
+2

Grazie mille. In realtà, questo dovrebbe essere contrassegnato come la risposta corretta. – Amrit

+11

Funziona perfettamente, vorrei evidenziare questa linea: 'using System.Web.Mvc.Html'. –

+0

Grazie mille, ha funzionato come un fascino :) –

-2

Non si dovrebbe chiamare parziali da un helper. Gli aiutanti "aiutano" i tuoi punti di vista e non molto altro. Controlla il metodo RenderAction da MVCContrib (se ne hai bisogno ora) o MVC v2 (se puoi aspettare ancora qualche mese). Sarai in grado di passare il tuo modello a un'azione del controller standard e ottenere un risultato parziale.

+0

+1 sì io non vorrei rendere un parziale da un aiutante. – griegs

+0

In alcune circostanze sì (probabilmente incluso questo), ma cerco di mantenere il mio HTML in HTML come i file dove possibile e di usare helper Html per fare la logica su come combinarli. In questo modo ottengo ancora delle belle funzionalità di editor nel mio html. Comunque non usare render render partial è esattamente quello che ho fatto in questo caso. –

+0

non sono sicuro che abbia risposto alla domanda .... – nixon

Problemi correlati