tutorial net mvc microsoft asp c# asp.net-mvc asp.net-mvc-3

microsoft - mvc asp.net c#



¿Obtengo un error de plantilla cuando intento hacer esto? (6)

Debería ser así:

@Html.TextBoxFor(x => x.Due)

Y si quieres algún formato para esta fecha:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime Due { get; set; }

y entonces:

@Html.EditorFor(x => x.Due)

Si realmente quiere usar este método .ToShortDateString() , necesita usar un ayudante no tipificado (obviamente eso es algo que recomendaría).

@Html.TextBox("Due", Model.Due.ToShortDateString())

Estoy usando asp.net mvc 3 y sigo recibiendo este error y no lo entiendo porque no estoy usando una plantilla.

Tengo esto en mi vista parcial

@model ViewModels.FormViewModel <div="tabs-1"> @Html.TextBoxFor(x => x.Due.ToShortDateString()) </div>

en mi modelo de vista

public class FormViewModel { public DateTime Due { get; set; } public FormViewModel() { DueDate = DateTime.UtcNow; } }

y me sale este error

Las plantillas solo se pueden usar con acceso a campos, acceso a propiedades, índice de matriz de dimensión única o expresiones de indizador personalizadas de un solo parámetro. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.InvalidOperationException: las plantillas solo se pueden usar con acceso a campos, acceso a propiedades, índice de matriz de dimensión única o expresiones de indizador personalizado de un solo parámetro.


En lugar de agregar formato en el modelo Use @Value Annotations como a continuación

@ Html.TextBoxFor (x => x.Due new {@ Value = Model.Due.ToShortDateString ()})


Existe una sobrecarga que puede ayudar a lograr esto, mientras se mantiene fuertemente tipada.

// Specify that you''re providing the format argument (string) @Html.TextBoxFor(x => x.Due, format: Model.Due.ToShortDateString()) // Or use the overload with format and html options, where null is the htmloptions @Html.TextBoxFor(x => x.Due, Model.Due.ToShortDateString(), null)


Recibirá el error porque el .TextBoxFor() html está utilizando una plantilla incorporada (un cuadro de texto para la entrada de cadena), y le está dando una expresión lambda que es demasiado complicada (es decir, no pertenece al conjunto de los tipos listados en el mensaje).

Para resolver el problema, cambie el tipo de propiedad que desea editar a una string , de modo que MVC pueda usar la plantilla de cadena predeterminada, o permita que MVC use la plantilla de fecha y hora predeterminada en su lugar. Yo recomendaría este último:

@Html.TextBoxFor(m => m.Due)

Si no está satisfecho con la forma en que se le pide a los usuarios que editen una fecha, coloque una vista parcial llamada "DateTime.cshtml" en ~ / Vistas / Plantillas de editor / compartidas donde compile el editor para que funcione de la manera deseada.


Si está utilizando MVC y tiene un elemento de código en línea, intente configurar un parámetro como este:

@{ string parameterValue = DateTime.Parse(@item.Value).ToShortDateString(); } @Html.DisplayFor(model => parameterValue)


Usted está engañando a la aplicación al pasar un método en el parámetro de textboxfor de textboxfor lugar de pasar una expresión.

Tu tenias :

@Html.TextBoxFor(x => x.Due.ToShortDateString())

Almacena tu resultado en una variable y luego usa una expresión. Prueba esto

var shortDate = Model.Due.ToShortDateString(); @Html.TextBoxFor(x => shortDate )