2011-07-22 5 views
1

私は最初のASP.NET MVC 3アプリケーションで作業していますが、Views、IceCreamController/IceCreamView、RecipeController/RecipeViewの2つのコントローラがあり、それぞれのユーザーが選択できますレシピを表示することができます。編集アクションでロードするビューを指定する

選択すると、その上に編集リンクが表示されます。クリックすると、このレシピのEditViewが表示され、ユーザーは選択されたレシピ項目の属性を編集できます。

素晴らしい。

[HttpPost] 
public ActionResult Edit(RecipeViewModel viewModel) 
{ 
    // updates the underlying model with the viewModel 
    // other things not germane to the discussion 

    return View(); 
} 

、それは常に私が欲しいものではありませんレシピのためのIndexビューを示す終わる:現在RecipeControllerでPOSTアクションがそうのように見える除いてこれが正常に動作します。むしろ、私は彼らが変更を提出したときに適切なビュー(IceCreamViewまたはRecipeView)にユーザを戻すことができるようにしたいと思います。

私は他の人がこれに類似したことをしたと仮定します。編集が完了したときにどのコントローラ/アクションをリダイレクトするべきかをどのように伝えますか?


注: 私は、私は2つの別々のコントローラ(IceCreamControllerとRecipeControllerを)持っていると、それぞれが選択し、最終的に

@Html.Partial("_Recipe", model.recipe) 
を行うことができますビューを持っていることを明確にするためにビット以上の追加特定のレシピの詳細を表示するには

をクリックします。私の問題は、RecipeControllerのEdit ActionでIceCreamViewまたはRecipeViewにページをリダイレクトする方法です。どちらのパスでもレシピの詳細が表示されている可能性があるため、どのように通信すればよいですか。


雇わソリューション:私は関与して単一のコントローラよりも多くを持っているので、あなたは、ダリンの答えにコメントで以下読むことができたよう

、ソリューションは、中渡すためのviewmodelを利用することですポストアクションの編集が完了したときにリダイレクトされるコントローラ/アクション。

私はこの状況(複数のパスを介して編集ページに到着する)が複数あるので、この機能を保持する単純なBaseViewModelを作成して、順番に並べてから適用可能なすべてのビューモデルを継承させると思いますそのBaseViewModelから。

私はそれはのようなもの以上のものにする必要があるとは思わないよ:のviewmodelのコンストラクタは、単にコントローラ/アクションに渡すとすることをハンドオフするように変更することができ、その後

public BaseViewModel 
{ 
    public BaseViewModel(string controller, string action) 
    { 
     ControllerName = controller ?? string.empty; 
     ActionName = action ?? string.empty; 
    } 

    public string ControllerName { get; set; } 
    public string Action { get; set; } 
} 

そして、ベースクラス。

これには他の解決策があるかもしれません。もしそうなら、私はそれらを聞いています。

答えて

4
[HttpPost] 
public ActionResult Edit(RecipeViewModel viewModel) 
{ 
    // updates the underlying model with the viewModel 
    // other things not germane to the discussion 

    return View("IceCreamView"); 
} 

またはあなたがこのビューを役立つであろうし、その後return RedirectToAction("IceCream");おそらくより正確ではなく、直接、成功した場合のPOSTアクションからビューを返すとするコントローラのアクションを持つことができますリダイレクトしたい場合。

+0

RedirectToAction( "IceCream");を指定すると、現在のコントローラでIceCreamという名前のアクションを呼び出していませんか?よくわかりません。 IceCreamとRecipeの2つのコントローラ/ビューのペアがここにあります。 EditページがRecipeViewの結果であった場合、私はこれを私に呼び戻す方法がわかりません。それは理にかなっていますか?私の質問はうまく言われていないと思います。お待ち頂きまして、ありがとうございます。 – itsmatt

+0

@itsmatt、yes 'RedirectToAction(" IceCream ");'は、同じコントローラ上で 'IceCream'アクションが必要です。そうしないと、直接ビューを返すことができます。 –

+0

私は自分の質問は、どのコントローラ/アクションを呼び出すために編集アクションが「知っている」ことができるかということですね。ユーザーは、異なるコントローラ上のアクションである2つの場所のいずれかから編集ページに到着しました。どのように情報を保存して(コントローラ/アクション)、後でそこに戻すことができますか? – itsmatt

関連する問題