Errore DateTime di formattazione “I modelli possono essere utilizzati solo con accesso al campo, accesso alle proprietà, indice di array a dimensione singola ..”

In MVC Razor view, sto provando a formattare un campo DateTime per visualizzare solo il tempo. Usando il codice sottostante ricevo l’errore “I modelli possono essere utilizzati solo con l’accesso al campo, l’accesso alle proprietà, l’indice di array a dimensione singola o le espressioni di indicizzazione personalizzate a singolo parametro.”

@(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss"))) 

Qualche aiuto per favore qual è la causa di questo errore e come risolverlo?

Grazie per l’aiuto.

DisplayFer prevede un’espressione che identifichi l’object che contiene le proprietà da visualizzare. Utilizzerà modelli incorporati o personalizzati per renderizzare tale visualizzazione. Si sta tentando di fornire la logica di visualizzazione come parametro dell’espressione, che non è valido.

Uso

 @String.Format("HH:mm:ss", Model.row.LastUpdateDate) 

o

 @Model.row.LastUpdateDate.ToString("HH:mm:ss") 

Stavo avendo lo stesso problema e ho risolto il problema. Se si desidera convertire “LastUpdatedDate” in un formato specifico, è ansible provare questo:

 @Html.TextBoxFor(m=>row.LastUpdatedDate, new { @Value = Convert.ToString(row.LastUpdatedDate.ToShortDateString()) }) 

Un altro ansible approccio potrebbe essere l’utilizzo di metodi di estensione per ottenere lo stesso risultato. Usando questo approccio non compilerai le tue visualizzazioni con un formato hard coded.

Metodo di estensione

  ///  /// Converts a DateTime string to Date string. Also if Date is default value ie 01/01/0001 /// then returns String.Empty. ///  /// Input DateTime property  /// Pass true to show only date. /// False will keep the date as it is. ///  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; } 

vista

  @Model.LastUpdateDate.ToString(true). 

Link: DateTime fino alla data in ASP.net MVC

Hai un modo molto semplice per risolvere questo problema e potresti incorrere in questo problema più di una volta.

Per capire cosa sta succedendo, stai passando un metodo come parametro. Invece, dovresti passare un’espressione.

Invece di farlo

 @(Html.DisplayFor(m=>row.LastUpdatedDate.ToString("HH:mm:ss"))) 

Dovresti fare

 var date = row.LastUpdatedDate.ToString("HH:mm:ss") @Html.DisplayFor(m=> date) 

Invece di TextBox, utilizzare TextBox e specificare il formato nel campo del valore, ad es

 @Html.TextBox("textboxName", Model.dateName.ToString("MMM dd yyyy")) 

Usando bootstrap datepicker questo sarebbe simile a:

 
@Html.TextBox("closeDate", Model.closeDate.ToString("MMM dd yyyy"), new { @class = "form-control", @readonly = "readonly", size = "16", placeholder = Lang.Label_closeDate })