2012-08-26 12 views
5

Estoy un poco perdido con la creación de un MVC3 Helper. Tengo mi ayudante que acaba de crear una fila con una expresión que se pasa como parámetro.MVC3 cómo usar @<text></text> como html helper parámetro

Quiero usar mi HtmlHelper así:

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

Ésta es mi HtmlHelper (algo de código irrelevante fue removido):

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

que aun no se puede compilar, porque el @<text>...</text> parámetro no es válido para HtmlHelper porque es una 'expresión lambda' y no se puede convertir en Expresión>

¿Alguien puede ayudar a resolverlo? Solo quiero pasar cualquier tipo de @<text></text> a mi HtmlHelper, y simplemente compilarlo y ponerlo como MvcHtmlString en la devolución formateada.

SOLUCIÓN:

encontré lo que estaba buscando en este post: ASP.Net MVC3 - Pass razor markup as a parameter

El tipo de parámetro para el @<text></text> debe haber una Func<object, HtmlHelper>!

Respuesta

2

El <text>...</text> or @: es una sintaxis Razor (no C#) para evitar elementos HTML, por lo que mi usggestion será que utilice cadena como parámetro en lugar de @<text>

+1

Pero al hacer eso, perderé la ventaja fuertemente tipada de usar html helpers dentro del parámetro. De todos modos, si uso la cadena, ¿hay alguna manera de compilarla en mi Ayudante? (Imagine una cadena formada por el contenido de mi ejemplo de etiquetas ) – IPValverde

Cuestiones relacionadas