model-view-controller - net - telerik mvc grid create



Wie kann ich "get" und "set" auf einer Model Property ändern? (1)

Derzeit habe ich eine DateTime-Eigenschaft für ein Modell. Ich benutze das Telerik MVC Framework, aber ich verwende eine DateTime-Eigenschaft und die Editor-Spalte für diese Eigenschaft ist automatisch generiert, so dass es keinen Code gibt, der es in meiner Ansicht oder Controller steuert. Auf der Telerik-Website finden Sie Anweisungen zum Festlegen der Standarddatumszeit für eine Datumszeitauswahl. Diese Auswahl wird jedoch nirgendwo initiiert, da sie sich in einer Spalte befindet. Das Problem ist, ich möchte die DateTime auf das aktuelle Datum und die Uhrzeit einstellen, wenn es nicht bereits angegeben ist. Derzeit sieht der Code für das Modell folgendermaßen aus:

 public DateTime CreatedDate { get; set;}

Ich möchte, dass es etwas mehr so ​​macht:

public DateTime CreatedDate
        {
            get
            {
                if (QuestionID != 0)
                {
                    return this.CreatedDate;
                }
                else
                {
                    return DateTime.Now;
                }

            }
            set { CreatedDate = value; }
        }

Auf diese Weise wird die DateTime zurückgegeben, die für diese Frage gespeichert ist, wenn die ID existiert. Wenn Sie eine neue Frage erstellen, wird die aktuelle DateTime abgerufen.

Das Problem ist hier mit dem Set. Wenn ich versuche, einen Bildschirm zu laden, setze get einen Stack Overflow. Ich bin mit dieser Art von Code wirklich nicht vertraut, also habe ich keine Ahnung, wie ich damit arbeiten soll.

Bevor wir nicht mit dem Modell gearbeitet haben und stattdessen JQuery verwendet haben, um die CreatedDate-Daten abzurufen und auf die aktuelle Datumszeit zu setzen. Das Problem damit ist, wenn Sie zum "Picker" -Teil der Datumszeit gehen, es geht auf die Standard-Datumszeit anstatt der aktuellen Zeit. Aus diesem Grund möchte ich es über Model, View oder Controller und nicht über Jquery setzen.

Lass mich wissen, wenn du mir helfen kannst, Gets und Sets im Modell zu verstehen!


Sie müssen eine private Eigenschaft haben, die Sie hinter den Kulissen verwenden.

    private DateTime _createdDate;
    public DateTime CreatedDate
    {
        get
        {
            if (QuestionID != 0)
            {
                return _createdDate;
            }
            else
            {
                return DateTime.Now;
            }

        }
        set { _createdDate = value; }
    }

Sie bekommen einen Überlauf, weil Sie gerade so etwas tun:

CreatedDate = 1/1/2012;
...which then calls
CreatedDate = 1/1/2012;
...which then calls
CreatedDate = 1/1/2012
..You get the point (it is continuously setting itself until the s)

Automatisch implementierte Eigenschaften ( {get;set;} ) verwenden tatsächlich eine private Variable hinter den Kulissen. Wenn Sie sich die IL ansehen würden, dann würden Sie sehen, dass sie das einfache {get;set;} in einen Getter / Setter auf der Grundlage einer generierten privaten Variable bricht. Sie sind nur eine Art "Compiler-Magie", um den Boiler-Plate-Code zu reduzieren, eine private Variable zu erstellen, wenn es im Getter / Setter keine echte Logik gibt. Wenn Sie Logik haben, müssen Sie diese private Variable selbst implementieren.