2012-02-29 17 views
0

コントローラのbazControllerの中にIndexページに表示するbazViewModelsのリストを返します。私はbazViewModel内の各アイテムのDetailsリンクをクリックしたときMVC3のインデックスからViewModelの内容を詳細ページに渡す

さて、私はDetailsページにその特定のviewmodel itemを渡すことができる方法はありますか?

私のビューモデルからURLを介して必要なデータを渡すことができますが、そうしないことをお勧めします。

ありがとうございました!

答えて

0

通常、あなたは何らかのIDを「詳細」アクションにのみ送信します。リンクは/ products/details/15のようになり、ID 17の製品の詳細を表示します。詳細アクションはIDをキーとして使用して必要なデータをフェッチします(データベースやセッションなど)。

ただし、これはそれらの線に沿って、自動的に実現するために、独自のModelBinderを作成することができます。

public class MyModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var val = bindingContext.ValueProvider.GetValue("id"); 

     var id = int.Parse(val.AttemptedValue); 

     return LoadFromDatabase(id); 
    } 
} 

だからあなたのアクションは次のようになります。

public ViewResult Details(MyModel model) 
    { 
     return View(); 
    } 
+0

私の問題は、インデックスページが読み込まれ、ページにアクセスするユーザーアカウントに基づいて 'usertype'が計算されるまでフィールドの1つが不明であることです。 'usertype'は可変性のためデータベースに格納されません。 – messedupfir

+0

それをセッションに保存することができます。固定キーまたは動的に作成されたキーのいずれかで、詳細アクションに渡して適切な値を検索します。 –

0

は、1からの情報を渡すためにTempDataを使用ページを他のページに移動すると、そのページで使用後にクリアされます

編集: も使用できますしかし、セッションを使用した後にセッションがクリアされるようにしてください。

関連する問題