asp.net mvc 3 - ¿Cómo invalido DisplayFor boolean?
asp.net-mvc-3 checkbox (4)
¿Qué tal sólo esta cosa simple:
@((bool)item.Ativo ? "Yes" : "No")
¿Cómo creo una plantilla de visualización para que pueda mostrar un bool como Sí o No no es una casilla de verificación? Usando mvc3
<%: Html.DisplayFor(model => model.SomeBoolean)%>
Este es un post antiguo, pero estaba teniendo problemas para encontrar una respuesta actual.
En realidad, hay un método @HTML en MVC 5, @Html.Display**Text**For(model => model.SomeBoolean)
.
Puedes extender HtmlHelper para bool.
y recuerde que debe usar la dirección YesNoExtensions namespace en la página de afeitar. rem: podemos sobrecargar DisplayFor para boolean con signo de función de cambio.
public namespace SampleExtensions
{
public static class YesNoExtensions
{
public static MvcHtmlString DisplayFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, bool flag = true)
{
object o = expression.Compile().Invoke(html.ViewData.Model);
if (o.GetType() == typeof(bool))
{
if ((bool)o)
return new MvcHtmlString("Yes");
else
return new MvcHtmlString("No");
}
return DisplayFor(html, expression);
}
}
}
y la hoja de afeitar.
<%@ import namespace=''SampleExtensions'' %>
<%: Html.DisplayFor(model => model.SomeBoolean, true)%>
el último parámetro verdadero es ficticio para el derecho de selección de Pantalla, que hemos sido sobrecargados por nosotros. Espero de utilidad.
Tuve que crear algo similar para que mostrara "Sim" y "Não" (portugués Sí / No). He creado el siguiente archivo:
Views/Shared/DisplayTemplates/Boolean.ascx
Y añadió el siguiente código:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= (bool) ViewData.Model ? "Sim" : "Não" %>
¡Espero que esto ayude!
EDITAR Olvidó, en su opinión, simplemente llámelo así:
<%= Html.DisplayFor(i => item.Ativo) %>
EDITAR 2 Para un nullable (bool?), Intente esto:
<%= (ViewData.Model == null) ? "NA" : (ViewData.Model == true) ? "Y" : "N"%>
EDIT 3 usando la sintaxis de Razor (Views / Shared / DisplayTemplates / Boolean.cshtml):
@{ Layout = null; }
@(ViewData.Model ? "Sim" : "Não")