Edição de Modelo de Sucesso sem um monte de campos ocultos

Em resumo: Como posso editar com êxito uma entrada de banco de dados sem a necessidade de incluir todos os campos para o modelo dentro da visualização de edição?

ATUALIZAR
Então eu tenho um item no banco de dados (um artigo). Eu quero editar um artigo. O artigo que edito tem muitas propriedades (Id, CreatedBy, DateCreated, Title, Body). Algumas dessas propriedades nunca precisam ser alteradas (como Id, CreatedBy, DateCreated). Então, na minha visão de edição, eu só quero campos de entrada para os campos que podem ser alterados (como título, corpo). Quando eu implemento uma visualização de edição como essa, a vinculação de modelo falha. Todos os campos para os quais eu não forneci uma entrada são ajustados para algum valor 'padrão' (como DateCreated é definido como 01/01/0001 12:00:00 am). Se euFaz Fornecer entradas para cada campo, tudo funciona bem e o artigo é editado como esperado. Eu não sei se está correto em dizer que "Model Binding falha" necessariamente, tanto quanto "o sistema preenche os campos com dados incorretos se nenhum campo Input foi fornecido para eles na Edit View."

Como posso criar uma Visualização de Edição de forma que eu só precise fornecer campos de entrada para campos que possam / precisem de edição, para que quando o método Editar no Controlador seja chamado, campos como DateCreated sejam preenchidos corretamente e não sejam definidos para algum valor incorreto padrão? Aqui está o meu método Edit como está atualmente:

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

E a vista de edição, se isso ajuda:

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

Se eu fosse deixar de fora estas duas entradas:

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

quando o método Edit é chamado, eles são definidos como valores padrão. CreatedBy está definido paraNulo, Criado está definido para01/01/0001 12:00:00 am

Por que eles não estão definidos para os valores como estão atualmente definidos no banco de dados?

questionAnswers(5)

yourAnswerToTheQuestion