【问题标题】:MVC Update ModelMVC 更新模型
【发布时间】:2009-06-17 23:00:54
【问题描述】:

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

我有一个 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; &lt;%=Html.ActionLink("Edit", "Edit", new {id=Model.Event.id}) %&gt;,当我创建一个新事件时,我使用&lt;%=Html.ActionLink("Add event","Edit", "Calendar") %&gt;

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

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

提前致谢。

&lt;/griegs&gt;

【问题讨论】:

    标签: asp.net-mvc model-view-controller updatemodel


    【解决方案1】:

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

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

    一切正常。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,其余的代码有点枯燥,但就像你说的那样。我尝试传入一个新创建的对象,并尝试用虚拟数据填充该对象,以防我在某处错过了一个不可为空的字段。仍然没有喜悦。当我尝试从提交按钮进行回发时,该问题 [仅] 发生。
      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多