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") %>

確かに、更新と作成の両方に同じビューを使用するべきではなく、おそらく 2 つのビューと PartialView にリファクタリングする必要があります。

それで、それは解決策ですか、それとも私が間違っていることがありますか?

前もって感謝します。

</griegs>

4

2 に答える 2

2

OK、本当に懸念事項を分離する必要があることがわかりました。

Add アクションと Edit アクションを作成し、編集画面を部分ビューに変換し、Add ビューを追加しました。

すべてが完璧に機能します。

mvc に関しては、次のことが当てはまると思います。「それが難しくなったとき、あなたはおそらく間違ったやり方をしている」.

于 2009-06-17T23:54:04.747 に答える
0

コードの残りの部分はわかりませんが、編集時に既存のレコードをビューに渡していると想定しています。同じ ID で新しいレコードを投稿しようとすると、コントローラーは、新しいレコードを作成するのではなく、既存のレコードを変更しようとしていると見なします。

編集と追加の両方に同じビューを使用できると思いますが、追加では、新しく作成されたレコード オブジェクトをビューに渡す必要があります。私のお金では、2 つの異なるコントローラー メソッド (1 つは追加用、もう 1 つは編集用) に投稿し、そこで単調な作業を行う方が簡単です。

于 2009-06-17T23:10:31.403 に答える