2012-08-26 17 views
5

Sono un po 'perso con la creazione di un helper MVC3. Ho il mio aiutante che crea solo una riga con un'espressione che viene passata come parametro.MVC3 come usare @<text></text> come parametro helper html

voglio usare il mio HtmlHelper come questo:

@Html.AddTableFormField(model => model.UserName, @<text> 
     @Html.EditorFor(m => m.UserName)<span class="warning">Use only letters</span> 
    </text>) 

Questo è il mio HtmlHelper (codice irrilevante è stato rimosso):

public static MvcHtmlString AddTableFormField<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> property, Expression<Func<TModel>> customFormat = null) 
    { 
     var metadata = ModelMetadata.FromLambdaExpression(property, htmlHelper.ViewData); 

     string displayName = metadata.DisplayName; 

     var propName = metadata.PropertyName; 

     if (string.IsNullOrWhiteSpace(displayName)) 
      displayName = propName; 

     MvcHtmlString htmlCustomFormat = null; 

     if (customFormat != null) 
     { 
      var deleg = customFormat.Compile(); 
      htmlCustomFormat = new MvcHtmlString(deleg().ToString()); 
     } 
     else 
      htmlCustomFormat = htmlHelper.EditorFor(property); 

     return new MvcHtmlString(string.Format("<tr>"+ 
       "<td class=\"form-label\">"+ 
        "<label class=\"editor-label\" for=\"{0}\">{1}<label>"+ 
       "</td>"+ 
       "<td class=\"form-data\">"+ 
        "{2}"+ 
       "</td>"+ 
      "</tr>", 
      propName, displayName, htmlCustomFormat)); 
    } 

non può nemmeno compilarlo, perché il Il parametro @<text>...</text> non è valido per HtmlHelper perché è un 'espressione lambda' e non può essere convertito in espressione>

Chiunque può aiutare a risolverlo? Voglio solo passare qualsiasi tipo di @<text></text> al mio HtmlHelper, e lo compila semplicemente e lo metto MvcHtmlString nel ritorno formattato.

SOLUZIONE:

ho trovato quello che cercavo in questo post: ASP.Net MVC3 - Pass razor markup as a parameter

Il tipo di parametro per il @<text></text> deve essere un Func<object, HtmlHelper>!

risposta

2

Il <text>...</text> or @: è una sintassi Razor (non C#) per evitare elementi HTML, quindi il mio usggestion sarà che si utilizza stringa come parametro invece di @<text>

+1

Ma facendo ciò perderò il vantaggio fortemente tipizzato di utilizzare gli helper html all'interno del parametro. Ad ogni modo, se uso la stringa, c'è un modo per compilarlo nel mio Helper? (Immagina una stringa formata dal contenuto del mio esempio di tag ) – IPValverde

Problemi correlati