tutorial net mvc libro español asp asp.net-mvc

asp.net-mvc - tutorial - libro asp.net mvc 5 español



Fecha solo de TextBoxFor() (17)

// se muestra datimetime en el datePicker el 24/11/2011 12:00:00 AM

// puede dividir esto por espacio y establecer el valor en fecha solamente

Guión:

if ($("#StartDate").val() != '''') { var arrDate = $(''#StartDate'').val().split(" "); $(''#StartDate'').val(arrDate[0]); }

Margen:

<div class="editor-field"> @Html.LabelFor(model => model.StartDate, "Start Date") @Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" }) </div>

Espera que esto ayude ..

Tengo problemas para mostrar la única parte de la fecha de DateTime en un cuadro de texto usando TextBoxFor <,> (expresión, htmlAttributes)

El modelo se basa en Linq2SQL, el campo es un DateTime en SQL y en el modelo de entidad.

Ha fallado:

<%= Html.TextBoxFor(model => model.dtArrivalDate, String.Format("{0:dd/MM/yyyy}", Model.dtArrivalDate))%>

Este truco parece estar depreciado, cualquier valor de cadena en el objeto htmlAttribute se ignora.

Ha fallado:

[DisplayFormat( DataFormatString = "{0:dd/MM/yyyy}" )] public string dtArrivalDate { get; set; }

Me gustaría almacenar y mostrar solo la parte de la fecha en la vista de detalles / edición, sin la parte "00:00:00".


Claro que puedes usar Html.EditorFor. Pero si desea usar TextBoxFor y usar el formato del atributo DisplayFormat, puede usarlo de esta manera:

@Html.TextBoxFor(model => model.dtArrivalDate, ModelMetadata.FromLambdaExpression(model => model.dtArrivalDate, ViewData).EditFormatString)

o crear la siguiente extensión:

public static class HtmlExtensions { public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) { return htmlHelper.TextBoxFor(expression, ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).EditFormatString, htmlAttributes); } }


Cuando se utilizan ayudantes de etiquetas en ASP.NET Core, el formato debe especificarse en formato ISO. Si no se especifica como tal, los datos de entrada enlazados no se mostrarán correctamente y se mostrarán como mm / dd / aaaa sin valor.

Modelo:

[Display(Name = "Hire")] [DataType(DataType.Date)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")] public DateTime? HireDate { get; set; }

Ver:

<input asp-for="Entity.HireDate" class="form-control" />

El formato también se puede especificar en la vista usando el atributo de formato asp.

El HTML resultante se verá como sigue:

<input class="form-control" type="date" id="Entity_HireDate" name="Entity.HireDate" value="2012-01-01">


El atributo DisplayFormat no funcionó para mí en ninguna de las dos formas en la carga inicial. Creé un EditorTemplate en su lugar:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime>" %> <%@ Import Namespace="System.Web.Mvc.Html" %> <%= Html.TextBox("", Model.ToShortDateString(), new { @class = "date-range" }) %>


El editor de plantillas funcionará solo para fines de visualización. Si usa el mismo editor (lo que tiene sentido porque es un editor) y proporcionó un valor como el 31/01/2010, recibirá un mensaje de error que indica que el formato no es válido.


Esto funcionó para mí.

@Html.TextBoxFor(m => m.DateOfBirth, "{0:MM/dd/yyyy}", new { size = "12", @class = "DOB", tabindex = 121 })


No tengas miedo de usar HTML en bruto.

<input type="text" value="<%= Html.Encode(Model.SomeDate.ToShortDateString()) %>" />


O usa los ayudantes sin tipo:

<%= Html.TextBox("StartDate", string.Format("{0:d}", Model.StartDate)) %>


Para mí, necesitaba mantener el TextboxFor() porque el uso de EditorFor() cambia el tipo de entrada hasta la fecha. Lo que, en Chrome, agrega un selector de fecha incorporado, que arruinó el selector de fecha jQuery que ya estaba usando. Entonces, para continuar usando TextboxFor() Y solo generar la fecha, puedes hacer esto:

<tr> <td class="Label">@Html.LabelFor(model => model.DeliveryDate)</td> @{ string deliveryDate = Model.DeliveryDate.ToShortDateString(); } <td>@Html.TextBoxFor(model => model.DeliveryDate, new { @Value = deliveryDate }) *</td> <td style="color: red;">@Html.ValidationMessageFor(model => model.DeliveryDate)</td> </tr>


Si está utilizando el selector de fecha de Bootstrap, puede agregar el atributo data_date_format como se muestra a continuación.

@Html.TextBoxFor(m => m.StartDate, new { @id = "your-id", @class = "datepicker form-control input-datepicker", placeholder = "dd/mm/yyyy", data_date_format = "dd/mm/yyyy" })


Solo agrégalo junto a tu modelo.

[DataType(DataType.Date)] public string dtArrivalDate { get; set; }


También puede usar los atributos HTML 5 aplicando esta anotación de datos:

[DataType(DataType.Date)]

Pero el problema es que esto habilita un selector de fecha específico del navegador para los navegadores HTML 5. Aún necesita su propio selector de fecha para los navegadores sin soporte, y luego debe asegurarse de que su selector de fecha no aparezca además del navegador (Modernizr puede hacer esto fácilmente), u ocultar el navegador si lo hace (complicado y yo No sé qué tan confiables fueron los métodos que vi).

Al final me fui con Alex porque mi entorno actual no tiene Modernizr, pero si lo tuviera, lo habría usado para mostrar condicionalmente solo mi selector de datos si el navegador ya no lo admite.


Tenga en cuenta que la exhibición dependerá de la cultura. Y mientras que en la mayoría de los casos todas las demás respuestas son correctas, no funcionó para mí. El problema de cultura también causará diferentes problemas con jQuery datepicker, si se adjunta.

Si desea forzar el formato de escape / de la siguiente manera:

@Html.TextBoxFor(model => model.dtArrivalDate, "{0:MM///dd///yyyy}")

Si no se me escapó, se muestra 08-01-2010 vs. esperado 08/01/2010 .

Además, si no se escapó, jQuery datepicker seleccionará una fecha predeterminada diferente, en mi caso fue May 10, 2012 .


Yo uso Globalize, así que trabajo con muchos formatos de fecha, así que use lo siguiente:

@Html.TextBoxFor(m => m.DateOfBirth, "{0:d}")

Esto ajustará automáticamente el formato de fecha a la configuración regional del navegador.


MVC4 resolvió este problema agregando una nueva sobrecarga de TextBoxFor , que toma un parámetro de formato de cadena. Ahora puedes simplemente hacer esto:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}")

También hay una sobrecarga que toma los atributos html, por lo que puede configurar la clase CSS, conectar selladores de fechas, etc.

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })


<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>


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

Entonces:

<%=Html.EditorFor(m => m.StartDate) %>