Edición exitosa de modelos sin un montón de campos ocultos

En breve: ¿Cómo edito correctamente una entrada de base de datos sin necesidad de incluir todos los campos del Modelo dentro de la Vista de edición?

ACTUALIZAR
Así que tengo un artículo en el DB (un artículo). Quiero editar un artículo. El artículo que edito tiene muchas propiedades (Id, CreatedBy, DateCreated, Title, Body). Algunas de estas propiedades nunca necesitan cambiarse (como Id, CreatedBy, DateCreated). Así que en mi Vista de edición, solo quiero campos de entrada para los campos que se pueden cambiar (como Título, Cuerpo). Cuando implemento una vista de edición como esta, el enlace de modelo falla. Cualquier campo para el que no proporcioné una entrada se establece en algún valor "predeterminado" (como DateCreated se establece en 01/01/0001 12:00:00 am). Si yohacer suministre entradas para cada campo, todo funciona bien y el artículo se edita como se espera. No sé si es correcto decir que "El enlace del modelo falla" necesariamente, tanto como que "el sistema completa los campos con datos incorrectos si no se les proporcionó un campo de entrada en la Vista de edición".

¿Cómo puedo crear una vista de edición de tal manera que solo tenga que proporcionar campos de entrada para los campos que pueden / necesitan editarse, de modo que cuando se llame al método de edición en el controlador, los campos como DateCreated se completen correctamente y no se configuren? a algún valor por defecto, incorrecto? Aquí está mi método de edición tal como está actualmente:

    [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");   
    }

Y la vista Editar si ayuda:

. . .
@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>
. . .

Si tuviera que dejar de lado estas dos entradas:

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

cuando se llama al método de edición, se establecen en valores predeterminados. CreatedBy se establece enNulo, Created se establece en01/01/0001 12:00:00 am

¿Por qué no están configurados en los valores como están configurados actualmente en la base de datos?

Respuestas a la pregunta(5)

Su respuesta a la pregunta