Успешное редактирование модели без множества скрытых полей

Вкратце : Как мне успешно отредактировать запись БД без необходимости включать каждое отдельное поле для модели внутри представления редактирования?

ОБНОВЛЕНИЕ
Итак, у меня есть элемент в БД (Статья). Я хочу отредактировать статью. У статьи, которую я редактирую, много свойств (Id, CreatedBy, DateCreated, Title, Body). Некоторые из этих свойств никогда не нужно менять (например, Id, CreatedBy, DateCreated).Поэтому в моем представлении «Редактировать» мне нужны поля ввода только для полей, которые можно изменить (например, «Заголовок», «Тело»). Когда я реализую такое представление редактирования, привязка модели терпит неудачу. Любые поля, для которых я не предоставил входные данные, устанавливаются на некоторое значение «по умолчанию» (например, DateCreated устанавливается на 01/01/0001 00:00:00). Если я сделаювходные данные для каждого поля, все будет работать нормально, и статья будет отредактирована, как и ожидалось. Я не знаю, правильно ли говорить, что «сбой привязки модели» обязательно, так как «система заполняет поля неверными данными, если для них не было указано поле ввода в представлении редактирования».

Как я могу создать представление редактирования таким образом, чтобы мне нужно было предоставить поля ввода только для полей, которые могут/нуждаются в редактировании, чтобы при вызове метода редактирования в контроллере такие поля, как DateCreated, заполнялись правильно, и не установлено какое-то значение по умолчанию, неправильное значение? Вот мой метод редактирования в его нынешнем виде:

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

И представление редактирования, если это поможет:

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

Если бы я пропустил эти два ввода:

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

при вызове метода редактирования они устанавливаются по умолчанию значения. Для CreatedBy установлено значение Null, для Created установлено значение 01/01/0001 00:00:00

Почему для них не установлены значения, установленные в настоящее время в БД?

10
задан Caleb Bergman 11 June 2012 в 17:50
поделиться