2

我不确定以前是否有人问过这个问题,但这里是。

我有一个 HTML 看起来像这样的 MVC 应用程序;

<%@ 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 无法更新模型的错误消息。

如果我从第一个 ActionResult 中删除“int?id”参数,则模型会根据新事件和现有事件进行更新。

当我编辑一个事件时,我使用以下 HTML;<%=Html.ActionLink("Edit", "Edit", new {id=Model.Event.id}) %>当我创建一个新事件时,我使用<%=Html.ActionLink("Add event","Edit", "Calendar") %>.

现在可以承认,我可能不应该对更新和创建使用相同的视图,并且可能应该重构为两个视图和一个 PartialView。

那么,这是解决方案还是我做错了什么?

提前致谢。

</griegs>

4

2 回答 2

2

好的,事实证明你真的应该分离关注点。

我创建了添加和编辑操作,将编辑屏幕转换为部分视图并添加了添加视图。

一切都完美无缺。

我想关于 mvc,以下是正确的。“当它变得困难时,你可能做错了”。

于 2009-06-17T23:54:04.747 回答
0

我看不到您的其余代码,但我假设在编辑时您正在将现有记录传递到视图中。当您尝试发布具有相同 ID 的新记录时,控制器会认为您正在尝试修改现有记录而不是创建新记录。

我认为您可以对编辑和添加使用相同的视图,但是在添加时,您必须将新创建的记录对象传递给您的视图。为了我的钱,发布到两种不同的控制器方法(一种用于添加,一种用于编辑)并在那里进行繁重的工作会更容易。

于 2009-06-17T23:10:31.403 回答