it-swarm.com.de

formatierung DateTime-Fehler "Vorlagen können nur mit Feldzugriff, Eigenschaftszugriff und eindimensionalem Arrayindex verwendet werden."

In der MVC Razor-Ansicht wird versucht, ein DateTime-Feld so zu formatieren, dass nur die Uhrzeit angezeigt wird. Unter Verwendung des folgenden Codes erhalte ich die Fehlermeldung "Vorlagen können nur mit Feldzugriff, Eigenschaftszugriff, eindimensionalem Arrayindex oder benutzerdefinierten Indexerausdrücken mit nur einem Parameter verwendet werden."

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

Irgendeine Hilfe bitte, was diesen Fehler verursacht und wie man es behebt?

Danke für Ihre Hilfe.

10
Toubi

DisplayFor erwartet einen Ausdruck, der das Objekt angibt, das die anzuzeigenden Eigenschaften enthält. Es werden integrierte oder benutzerdefinierte Vorlagen verwendet, um diese Anzeige zu rendern. Sie versuchen, die Anzeigelogik als den ungültigen Ausdrucksparameter anzugeben.

Benutzen

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

oder

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

Ich hatte das gleiche Problem und ich habe das Problem gelöst. Wenn Sie "LastUpdatedDate" in ein bestimmtes Format konvertieren möchten, können Sie Folgendes versuchen:

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

Ein anderer möglicher Ansatz könnte darin bestehen, Erweiterungsmethoden zu verwenden, um dasselbe zu erreichen. Mit diesem Ansatz füllen Sie Ihre Ansichten nicht mit fest codiertem Format.

Erweiterungsmethode

    /// <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;
    }

Ansicht

 @Model.LastUpdateDate.ToString(true).

Link: DateTime to Date in ASP.net MVC

2
Rohit

Sie haben eine sehr einfache Möglichkeit, dieses Problem zu lösen, und Sie könnten mehr als einmal auf dieses Problem stoßen.

Um zu verstehen, was passiert, übergeben Sie eine Methode als Parameter. Stattdessen sollten Sie einen Ausdruck übergeben.

Anstatt dies zu tun

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

Du solltest tun

var date = row.LastUpdatedDate.ToString("HH:mm:ss")
<td>@Html.DisplayFor(m=> date)</td>
1
Daniel

Verwenden Sie anstelle von TextBoxFür TextBox das Format im Wertefeld, d. H.

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

Mit dem Bootstrap Datepicker würde dies so aussehen:

<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>
0
dunwan