¿Cómo creo una plantilla de visualización para que pueda mostrar un bool como Sí o No, no como casilla de verificación? Usando mvc3¿Cómo invalido DisplayFor boolean?
<%: Html.DisplayFor(model => model.SomeBoolean)%>
¿Cómo creo una plantilla de visualización para que pueda mostrar un bool como Sí o No, no como casilla de verificación? Usando mvc3¿Cómo invalido DisplayFor boolean?
<%: Html.DisplayFor(model => model.SomeBoolean)%>
Tuve que crear algo similar para que aparezca "Sim" y "Não" (portugués Sí/No). He creado el siguiente archivo:
Views\Shared\DisplayTemplates\Boolean.ascx
y ha añadido el siguiente código:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%= (bool) ViewData.Model ? "Sim" : "Não" %>
Espero que esto ayude!
EDITAR olvidaba, en su opinión, sólo tiene que llamarlo así:
<%= Html.DisplayFor(i => item.Ativo) %>
EDIT 2 Para una anulable (? Bool), intente esto:
<%= (ViewData.Model == null) ? "NA" : (ViewData.Model == true) ? "Y" : "N"%>
EDIT 3 Uso de la sintaxis de Razor (Views \ Shared \ DisplayTemplates \ Boolean.cshtml):
@{ Layout = null; }
@(ViewData.Model ? "Sim" : "Não")
puede extender HtmlHelper para bool.
y recuerde que debe usar la dirección del espacio de nombres YesNoExtensions en la página de afeitar. rem: podemos sobrecargar DisplayFor for boolean con el signo de cambio de función.
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 página de afeitar.
<%@ import namespace='SampleExtensions' %>
<%: Html.DisplayFor(model => model.SomeBoolean, true)%>
último parámetro verdadero es ficticio para seleccionar a la derecha Mostrar para el que hemos sobrecargado. Espero útil.
¿no puedo crear una nueva plantilla de visualización en compartida y pasar un valor de cadena? –
sí, puedes hacerlo. recuerde, para dar el nombre de la plantilla para DisplayFor. funcionará. –
¿Qué tal esta simple cosa:
@((bool)item.Ativo ? "Yes" : "No")
Ésta es una entrada antigua, pero yo 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)
.
Tuve que agregar un molde a un booleano como este: '<% = (bool) ViewData.Model? "Sí": "No"%> ' Gracias, ¡funcionó de maravilla! – xcer
gracias por la sugerencia @xcer, hemos actualizado el código anterior. – mateuscb
Solo una sugerencia: intente evitar los booleanos que pueden anularse. Muchas veces bool? = falso es, para la aplicación, lo mismo que bool = falso. Además, muchas veces el usuario final no puede distinguir entre un valor nulo y uno falso (para el tipo de datos booleano). Esencialmente, si está usando casillas de verificación para controlar sus booleanos, omita el nulo. Si necesita el tri-estado (nulo, verdadero, falso), usará algún tipo de menú desplegable o una casilla de verificación elegante que indica específicamente la ausencia de un valor. – tggm