En mode MVC Razor, j'essaie de formater un champ DateTime pour afficher l'heure uniquement. En utilisant le code ci-dessous, j'obtiens une erreur "Les modèles ne peuvent être utilisés qu'avec des expressions d'accès aux champs, d'accès aux propriétés, d'index de tableaux à une dimension ou personnalisés à un paramètre."
<td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>
Toute aide s'il vous plaît ce qui est à l'origine de cette erreur et comment y remédier?
Merci de votre aide.
DisplayFor attend une expression qui identifie l'objet qui contient les propriétés à afficher. Il utilisera des modèles intégrés ou personnalisés pour rendre cet affichage. Vous essayez de fournir la logique d'affichage en tant que paramètre d'expression, ce qui n'est pas valide.
Utilisation
@String.Format("HH:mm:ss", Model.row.LastUpdateDate)
ou
@Model.row.LastUpdateDate.ToString("HH:mm:ss")
J'avais le même problème et j'ai résolu le problème. Si vous voulez convertir "LastUpdatedDate" dans un format spécifique, essayez ceci:
@Html.TextBoxFor(m=>row.LastUpdatedDate,
new { @Value = Convert.ToString(row.LastUpdatedDate.ToShortDateString()) })
Une autre approche possible pourrait être d’utiliser des méthodes d’extension pour atteindre le même objectif. En utilisant cette approche, vous ne renseignerez pas vos vues avec un format codé en dur.
Méthode d'extension
/// <summary>
/// Converts a DateTime string to Date string. Also if Date is default value i.e. 01/01/0001
/// then returns String.Empty.
/// </summary>
/// <param name="inputDate">Input DateTime property </param>
/// <param name="showOnlyDate">Pass true to show only date.
/// False will keep the date as it is.</param>
/// <returns></returns>
public static string ToString(this DateTime inputDate, bool showOnlyDate)
{
var resultDate = inputDate.ToString();
if (showOnlyDate)
{
if (inputDate == DateTime.MinValue)
{
resultDate = string.Empty;
}
else
{
resultDate = inputDate.ToString("dd-MMM-yyyy");
}
}
return resultDate;
}
Voir
@Model.LastUpdateDate.ToString(true).
Vous avez un moyen très simple de résoudre ce problème et vous pouvez rencontrer ce problème plusieurs fois.
Pour comprendre ce qui se passe, vous passez une méthode en tant que paramètre. Au lieu de cela, vous devriez passer une expression.
Au lieu de faire ça
<td>@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss")))</td>
Tu devrais faire
var date = row.LastUpdatedDate.ToString("HH:mm:ss")
<td>@Html.DisplayFor(m=> date)</td>
Au lieu de TextBoxFor, utilisez TextBox et spécifiez le format dans le champ de valeur, i.e.
@Html.TextBox("textboxName", Model.dateName.ToString("MMM dd yyyy"))
En utilisant bootstrap datepicker, ceci ressemblerait à ceci:
<div class="input-group date datetime col-md-8 col-xs-7" data-min-view="2" data-date-format="M dd yyyy">
@Html.TextBox("closeDate", Model.closeDate.ToString("MMM dd yyyy"), new { @class = "form-control", @readonly = "readonly", size = "16", placeholder = Lang.Label_closeDate })
<span class="input-group-addon btn btn-primary">
<span class="glyphicon glyphicon-th"></span>
</span>
</div>