2012-06-22 8 views
8

私がビューに結合していビューモデルを有する:ASP.NET MVCよりモデルIDを投稿するのに適していますか?

ProductViewModel model = Mapper.Map<Product, ProductViewModel>(product); 
return View(model); 

図(とのviewmodel)はそうProductViewModelがデータベース内のIDに対応するID性を有するProductを編集するために使用されます。

とバック私はビューに私の形でこれをやっているコントローラにIDを投稿するには:

@Html.HiddenFor(x => x.Id) 

これはを作品にもかかわらず - 私はポストには良い方法があったかどうかを疑問に思いましたIDはコントローラに戻ってきますか?ルート値は多分でしょうか?それともこれはかなり標準的なパターン/アプローチですか?

答えて

11

私は私のルートのidが含まGETアクションがある場合:/Products/Edit/1が、私は通常のルート値としてそれを維持する:

[HttpPost] 
public ActionResult Edit(int id, EditProductViewModel model) 

これはしかし、純粋に私の好みです。それを行う方法はありません。

このメソッドの素晴らしい点は、URLの一部であるため隠し値を使用して渡す必要がなくなったことです。実際には、あなたが隠し値でそれを渡すと、私はそれが無視されると信じています。 idは、ルートの一部であるため、

あるいは、あなたも別のパラメータを持っている必要はありません。

[HttpPost] 
public ActionResult Edit(EditProductViewModel model) 

public class EditProductViewModel 
{ 
    public int Id { get; set; } 
} 

は再び、これは純粋に好みの事です。

+0

私は隠されたフィールドが無視されるとは思わない、彼らはモデルオブジェクトにマップされるように見えるフィールドと同様です。 – Greg

+0

@Gregあなたが 'id'と呼ばれる隠されたフィールドを持っていて、ルート値が勝てる' id'というルート値を持っていたら意味しました。 – Dismissile

+0

ああ、私はあなたを得た! – Greg

1

私は答えは、それが依存すると思います。

オブジェクト全体が編集されてポストバックされていますか?もしそうなら、モデルの一部としてIDをポストバックすることを提案したいと思います。

[HttpPost] 
public ActionResult Edit(EditProductViewModel model) 

私は完全に有効なものだと思います。ただし、注意してください。編集中のリソースが保護されたリソースである場合は、ユーザーが正しい権限を持っていることを確認してください。私はのように過剰見るであろうそのシナリオでモデルを作成したよう

[HttpPost] 
public ActionResult Edit(int id, string comment) 

..:それは部分的な編集なら

、おそらく私はおそらくより行うように誘惑されると思いAjax呼び出しを通じてコメントを編集します。権限の問題がまだ

すべてのことが言われて、私は自分自身何の専門家だ:)かかわらず適用されます:)

ちなみに...私はそれをすべてを使用し、隠しフィールドに何か問題がないと思います時間。しかし、それはajax呼び出しであり、あなたのポストするajax呼び出しの一部であるため、必要ではないかもしれません。

関連する問題