web-dev-qa-db-fra.com

Date uniquement de TextBoxFor ()

Je ne parviens pas à afficher la seule partie date d'un DateTime dans une zone de texte à l'aide de TextBoxFor <,> (expression, htmlAttributes).

Le modèle est basé sur Linq2SQL, le champ est un DateTime sur SQL et dans le modèle Entity.

Failed:

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

Cette astuce semble être dépréciée, toute valeur de chaîne dans l'objet htmlAttribute est ignorée.

Failed:

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

Je souhaite stocker et afficher uniquement la partie date dans la vue détails/modification, sans la partie "00:00:00".

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

Ensuite:

<%=Html.EditorFor(m => m.StartDate) %>
229
Kevin Craft

MVC4 a résolu ce problème en ajoutant une nouvelle surcharge TextBoxFor, qui prend un paramètre de format de chaîne. Vous pouvez maintenant simplement faire ceci:

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

Il y a aussi une surcharge qui prend des attributs HTML, vous pouvez donc définir la classe CSS, câbler les datepickers, etc.:

@Html.TextBoxFor(m => m.EndDate, "{0:d MMM yyyy}", new { @class="input-large" })
356
Ross McNab
<%= Html.TextBoxFor(model => model.EndDate, new { @class = "jquery_datepicker", @Value = Model.EndDate.ToString("dd.MM.yyyy") })%>
259
Alexeyss

Ou utilisez les aides non typés:

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

Cela a fonctionné pour moi.

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

N'ayez pas peur d'utiliser du HTML brut.

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

Vous pouvez également utiliser les attributs HTML 5 en appliquant cette annotation de données:

[DataType(DataType.Date)]

Mais le problème est que cela active un sélecteur de date spécifique au navigateur pour les navigateurs HTML 5. Vous avez toujours besoin de votre propre sélecteur de date pour les navigateurs sans assistance, puis vous devez vous assurer que votre sélecteur de date n'apparaît pas en plus du navigateur (Modernizr peut le faire facilement), ou masquer le navigateur s'il le fait (compliqué, etc.). ne sais pas à quel point les méthodes que j'ai vues étaient fiables).

En fin de compte, j’ai choisi Alex, car mon environnement actuel n’avait pas Modernizr, mais si c’était le cas, j’aurais utilisé cet écran pour afficher conditionnellement mon sélecteur de données uniquement si le navigateur ne le supportait pas.

3
AaronLS

Pour moi, je devais conserver la TextboxFor(), car utiliser EditorFor() modifie le type d'entrée en date. Qui, dans Chrome, ajoute un sélecteur de date intégré, ce qui a bousillé le sélecteur de date jQuery que j’utilisais déjà. Donc, pour continuer à utiliser TextboxFor() ET à n'émettre que la date, vous pouvez le faire:

<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>
3
ScubaSteve

Si vous utilisez le sélecteur de date Bootstrap, vous pouvez simplement ajouter l'attribut data_date_format comme ci-dessous.

      @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" 
})
1
uda

L'éditeur de modèles fonctionne uniquement à des fins d'affichage. Si vous utilisez le même éditeur (ce qui est logique car c'est un éditeur) et que vous avez fourni une valeur telle que 31/01/2010, vous obtiendrez un message d'erreur indiquant que le format est invalide.

1
guerven

L'attribut DisplayFormat ne fonctionnait pas pour moi sous l'une ou l'autre forme lors du chargement initial. J'ai créé un EditorTemplate à la place:

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

Gardez à l'esprit que l'affichage dépendra de la culture. Et bien que dans la plupart des cas toutes les autres réponses soient correctes, cela n’a pas fonctionné pour moi. Un problème de culture causera également différents problèmes avec jQuery datepicker, le cas échéant.

Si vous souhaitez forcer le format d'échappement / de la manière suivante:

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

Si pas échappé pour moi, il montre 08-01-2010 vs. attendu 08/01/2010.

Aussi, si pas échappé, jQuery datepicker sélectionnera une valeur par défaut différente. Dans mon exemple, il s’agissait de May 10, 2012.

1
CrnaStena

J'utilise Globalize afin de travailler avec de nombreux formats de date afin d'utiliser les éléments suivants:

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

Cela ajustera automatiquement le format de la date aux paramètres régionaux du navigateur.

0
Liam

Bien sûr, vous pouvez utiliser Html.EditorFor. Mais si vous voulez utiliser TextBoxFor et utiliser le format de l'attribut DisplayFormat, vous pouvez l'utiliser de cette façon:

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

ou créer la prochaine extension:

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);
    }
}
0
Yury Dzhantuganov

// datimetime s'affiche dans datePicker le 24.11.2011 12:00:00 AM

// vous pouvez diviser cela par un espace et définir la valeur à la date uniquement

Scénario:

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

Balisage:

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

J'espère que cela aide ..

0
coymax

Lorsque vous utilisez des aides de balises dans ASP.NET Core, le format doit être spécifié au format ISO. Si elles ne sont pas spécifiées en tant que telles, les données d'entrée liées ne s'afficheront pas correctement et s'afficheront sous la forme mm/jj/aaaa sans valeur.

Modèle:

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

Vue:

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

Le format peut également être spécifié dans la vue à l'aide de l'attribut asp-format.

Le code HTML résultant ressemblera à ceci:

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

Ajoutez juste à côté de votre modèle.

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