Erfolgreiche Modellbearbeitung ohne viele versteckte Felder

Zusamenfassend: Wie bearbeite ich erfolgreich einen DB-Eintrag, ohne jedes einzelne Feld für das Modell in die Bearbeitungsansicht aufnehmen zu müssen?

AKTUALISIEREN
Ich habe also einen Artikel in der DB (einen Artikel). Ich möchte einen Artikel bearbeiten. Der Artikel, den ich bearbeite, hat viele Eigenschaften (Id, CreatedBy, DateCreated, Title, Body). Einige dieser Eigenschaften müssen nie geändert werden (z. B. Id, CreatedBy, DateCreated). Daher möchte ich in meiner Bearbeitungsansicht nur Eingabefelder für Felder, die geändert werden können (z. B. Titel, Text). Wenn ich eine Bearbeitungsansicht wie diese implementiere, schlägt die Modellbindung fehl. Alle Felder, für die ich keine Eingabe gemacht habe, werden auf einen 'Standard'-Wert gesetzt (wie DateCreated wird auf den 01.01.10001 00:00:00 Uhr gesetzt). Wenn ichtun Geben Sie Eingaben für jedes Feld ein, alles funktioniert einwandfrei und der Artikel wird wie erwartet bearbeitet. Ich weiß nicht, ob es richtig ist, zu sagen, dass die "Modellbindung fehlschlägt", sondern dass "das System Felder mit falschen Daten ausfüllt, wenn in der Bearbeitungsansicht kein Eingabefeld dafür angegeben wurde".

Wie kann ich eine Bearbeitungsansicht so erstellen, dass ich nur Eingabefelder für Felder bereitstellen muss, die bearbeitet werden können / müssen, damit Felder wie DateCreated beim Aufrufen der Edit-Methode im Controller korrekt ausgefüllt und nicht festgelegt werden zu einem Standardwert, falscher Wert? Hier ist meine Bearbeitungsmethode, wie sie aktuell ist:

    [HttpPost]
    public ActionResult Edit(Article article)
    {
        // Get a list of categories for dropdownlist
        ViewBag.Categories = GetDropDownList();


        if (article.CreatedBy == (string)CurrentSession.SamAccountName || (bool)CurrentSession.IsAdmin)
        {                
            if (ModelState.IsValid)
            {
                article.LastUpdatedBy = MyHelpers.SessionBag.Current.SamAccountName;
                article.LastUpdated = DateTime.Now;
                article.Body = Sanitizer.GetSafeHtmlFragment(article.Body);

                _db.Entry(article).State = EntityState.Modified;
                _db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }
            return View(article);
        }

        // User not allowed to edit
        return RedirectToAction("Index", "Home");   
    }

Und die Bearbeitungsansicht, wenn es hilft:

. . .
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>Article</legend>

    <p>
        <input type="submit" value="Save" /> | @Html.ActionLink("Back to List", "Index")
    </p>

    @Html.Action("Details", "Article", new { id = Model.Id })

    @Html.HiddenFor(model => model.CreatedBy)
    @Html.HiddenFor(model => model.DateCreated)

    <div class="editor-field">
        <span>
            @Html.LabelFor(model => model.Type)
            @Html.DropDownListFor(model => model.Type, (SelectList)ViewBag.Categories)
            @Html.ValidationMessageFor(model => model.Type)
        </span>
        <span>
            @Html.LabelFor(model => model.Active)
            @Html.CheckBoxFor(model => model.Active)
            @Html.ValidationMessageFor(model => model.Active)
        </span>
        <span>
            @Html.LabelFor(model => model.Stickied)
            @Html.CheckBoxFor(model => model.Stickied)
            @Html.ValidationMessageFor(model => model.Stickied)
        </span>            
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Title)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Title)
        @Html.ValidationMessageFor(model => model.Title)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.Body)
    </div>
    <div class="editor-field">
        @* We set the id of the TextArea to 'CKeditor' for the CKeditor script to change the TextArea into a WYSIWYG editor. *@
        @Html.TextAreaFor(model => model.Body, new { id = "CKeditor", @class = "text-editor" })
        @Html.ValidationMessageFor(model => model.Body)
    </div>
</fieldset>
. . .

Wenn ich diese beiden Eingaben weglassen würde:

@Html.HiddenFor(model => model.CreatedBy)
@Html.HiddenFor(model => model.DateCreated)

Wenn die Edit-Methode aufgerufen wird, werden die Standardwerte verwendet. CreatedBy ist auf gesetztNull, Created ist auf gesetzt01.01.10001 00:00 Uhr

Warum werden sie nicht auf die Werte gesetzt, auf die sie aktuell im DB gesetzt sind?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage