Модель обновления MVC - PullRequest
2 голосов
/ 18 июня 2009

Я не уверен, если об этом уже спрашивали, но здесь идет.

У меня есть приложение MVC с HTML, похожим на это;

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<EnvironmentalVandals.Controllers.MonthlyItemsFormViewModel>" %>

У меня в контроллере следующее:

    [Authorize]
    public ActionResult Edit(int? id)
    { snip }

Затем на событие кнопки отправки;

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize]
    public ActionResult Edit(FormCollection collection)
    {
        CalendarItem fvm = new CalendarItem();

        UpdateModel(fvm);
    }

Если я обновляю существующее событие, у меня нет проблем. Если я добавляю новое событие, я получаю сообщение об ошибке, что UpdateModel не удалось обновить модель.

Если я удаляю параметр «int? Id» из первого ActionResult, модель обновляется как для новых, так и для существующих событий.

Когда я редактирую событие, я использую следующий HTML; <%=Html.ActionLink("Edit", "Edit", new {id=Model.Event.id}) %> и когда я создаю новое событие, я использую <%=Html.ActionLink("Add event","Edit", "Calendar") %>.

Теперь, допустим, мне, вероятно, не следует использовать один и тот же вид для обновления и создания, и, возможно, я должен реорганизовать два вида и PartialView.

Итак, это решение или я что-то не так делаю?

Заранее спасибо.

</griegs>

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Хорошо, оказывается, вам действительно нужно разделить проблемы.

Я создал действия Add и Edit, преобразовал экран редактирования в частичное представление и добавил представление Add.

Все отлично работает.

Полагаю, в отношении mvc верно следующее. «Когда становится трудно, вы, вероятно, делаете это неправильно».

0 голосов
/ 18 июня 2009

Я не вижу остальной части вашего кода, но я предполагаю, что при редактировании вы передаете существующую запись в представление. Когда вы пытаетесь опубликовать новую запись с тем же идентификатором, контроллер думает, что вы пытаетесь изменить существующую запись вместо создания новой.

Я думаю, что вы можете использовать одно и то же представление как для правок, так и для добавлений, но при добавлении вам придется передать созданный объект записи в ваше представление. За мои деньги проще опубликовать два разных метода контроллера (один для добавления, другой для редактирования) и выполнить там самую грубую работу.

...