2011-05-14 17 views
18

Es posible añadir un HTML title atributo a una etiqueta de entrada, así:Render etiqueta span con el atributo título con ASP.NET MVC 3 Ayudantes

@Html.TextBoxFor(model => model.Name, new { title = "Customer name" }) 

¿Hay un ayudante similar para texto estático? Con @Html.DisplayFor(model => model.Name) puedo representar el texto de una propiedad del modelo. ¿Cómo puedo añadir atributos HTML para que llegue una etiqueta span rendido como esto:

<span title="Customer name">ABC</span> 
+0

de este pregunta etiquetados de forma explícita "MVC 3 ** **", pero tenga en cuenta que para la versión 4 (máquina de afeitar 2) y arriba puedes simplemente salir haciendo, por ejemplo ' @ Model.Name' – Jeroen

Respuesta

38

HTML personalizado ayudante es probablemente la solución más elegante.

public static MvcHtmlString SpanFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null) 
{ 
    var valueGetter = expression.Compile(); 
    var value = valueGetter(helper.ViewData.Model); 

    var span = new TagBuilder("span"); 
    span.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 
    if (value != null) 
    { 
     span.SetInnerText(value.ToString()); 
    } 

    return MvcHtmlString.Create(span.ToString()); 
} 

=>

@Html.SpanFor(model => model.Name, new { title = "Customer name" }) 
+0

¡Eso funciona genial! Solo tuve que atrapar ese 'valor' puede ser' nulo' ('if (value! = Null)' antes de 'span.SetInnerText (value.ToString());' ¡Muchas gracias! – Slauma

+0

datos enlazados a este spanfor es no disponible durante httpPost ... Cualquier actualización para ese –

+0

Esto funcionó para mí. Muchas gracias! –

2
<span title="Customer name">@Model.Name</span> 
+0

o ' @ Html.DisplayTextFor (m => m.Name)' if 'Name' puede ser 'null' –

+0

Entonces, ¿no hay una ayuda incorporada que pueda crear esta etiqueta span? – Slauma

-1

utiliza el abajo @ Html.DisplayTextFor (m => m.CustomerName)

+2

Esto no crea una etiqueta span. – Slauma

0

Si está utilizando @ HTML.DisplayFor modelo => modelo (.CustomerName) Se representará como texto, no mostrará ninguna etiqueta dentro de los valores.

Si desea enlazar el "DisplayFor" usando palmo, utilizar la etiqueta a continuación,

<span id="CustomerName">@Html.DisplayFor(model=>model.CustomerName)</span> 
Cuestiones relacionadas