2010-01-30 6 views
5

Esiste un helper HTML che accetta e restituisce solo HTML non elaborato? Invece di fare qualcosa di brutto come questo:MVC2: Esiste un Helper HTML per l'Html raw?

<% if (Model.Results.Count > 0) { %><h2>Results</h2><% } %> 

mi piacerebbe fare qualcosa di simile:

<% if (Model.Results.Count > 0) { Html.RawHtml("<h2>Results</h2>") } %> 

Non un detergente bel po ', ma penso che sia un po' di un miglioramento. Esiste qualcosa del genere? O c'è forse un'alternativa migliore per l'output di HTML html all'interno di quei caratteri di escape rispetto all'utilizzo di helper Html?

+0

Ora che ci penso, si perderebbe funzionalità IntelliSense e all'analisi di oggetti HTML, semplicemente utilizzando una stringa letterale del genere. Con un semplice esempio come sopra, questo non è davvero un grosso problema, ma credo che con un html più complesso potrebbe essere. –

risposta

5

Response.Write dovrebbe funzionare. (Anche se forse è un po 'come fare un passo indietro!) Dovresti essere in grado di creare un metodo di estensione per farlo. E forse invece di usare una stringa HTML, potresti voler costruire il tuo markup nel codice using the TagBuilder.

0

C'è una tale aiuto ora:

Html.Raw("<h2>Results</h2>") 
+4

È disponibile solo in MVC3 e non in MVC2. –

1

Se si desidera utilizzare un HtmlHelper per qualsiasi cosa tu' facendo, puoi restituire un MvcHtmlString creato con un TabBuilder

Ecco un esempio di uno che uso:

public static MvcHtmlString AccountsDropDown(this HtmlHelper helper, string name, object htmlAddributes = null, bool addNull = false, Guid? selected = null) 
    { 
     Account acc = HttpContext.Current.Session["account"] as Account; 

     TagBuilder tb = new TagBuilder("select"); 

     tb.GenerateId(name); 
     tb.Attributes["name"] = name; 

     if (addNull) 
      tb.InnerHtml += string.Format("<option value= '{0}'> {1} </option>", "", "None"); 


     Dictionary<Guid, String> accounts; 

     if (acc.Master) 
      accounts = db.Account.ToDictionary(x => x.Id, x => x.Name); 
     else 
      accounts = db.Account.Where(x => x.Id == acc.Id).ToDictionary(x => x.Id, x => x.Name); 

     foreach (var account in accounts) 
      tb.InnerHtml += string.Format(
       "<option value= '{0}' {2}> {1} </option>", 
       account.Key, 
       account.Value, 
       selected == account.Key ? " selected='selected' " : "" 
      ); 

     return new MvcHtmlString(tb.ToString()); 
    } 
Problemi correlati