2009-06-17 8 views
2

これまでに聞いたことがあるのか​​どうかは分かりませんが、ここには入ります。MVCアップデートモデル

私はこのような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") %>を使用します。

は今admitably私はおそらく、両方の更新のために同じビューを使用して作成し、おそらく二つのビューとPartialViewにリファクタリングすべきであるべきではありません。

だから、私が間違っているのことが解決策であるか、そこには何か他のものでしょうか?

ありがとうございます。

</griegs>

答えて

0

私はあなたのコードの残りの部分を見ることはできませんが、私は編集に使用すると、ビューに既存のレコードを渡していると仮定しています。同じIDの新しいレコードを投稿しようとすると、コントローラは、新しいレコードを作成するのではなく、既存のレコードを変更しようとしていると考えます。

は、私はあなたが編集や追加の両方に同じビューを使用することができると思いますが、アドオンであなたはあなたのビューにnewly'createdレコードオブジェクトに渡す必要があります。私のお金のために、2つの異なるコントローラメソッド(1つは追加用、もう1つは編集用)にポストするのが簡単です。

+0

ええ、コードの残りの部分は少し退屈ですが、あなたが言うように。私は新しく作成されたオブジェクトを渡そうとしましたが、そのオブジェクトにダミーデータを埋め込むことを試みました。まだ喜びはありません。 送信ボタンからのポストバックでUpdateModelを実行しようとすると[のみ]問題が発生します。 –

2

[OK]をクリックすると、本当に懸念が生じるはずです。

私は、[追加]、[編集]アクションを作成した部分図に編集画面を変換し、追加のビューを追加しました。

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

mvcに関しては次のことが当てはまります。 「難しくなるとおそらくそれは間違っているでしょう」