他のコントローラからのビューを表示することは可能ですか?
たとえばCategoriesController
ビューとCategory/NotFound.aspx
ビューがあるとします。 CategoriesController
にいる間、私は簡単にView("NotFound")
を返すことができます。
ProductsController
と、商品を追加するためのアクションとビューがあるとします。ただし、この操作には、商品を追加するカテゴリが必要です。たとえば、Products/Add/?catid=10
です。
catid
に基づいてカテゴリを見つけることができない場合は、Productsコントローラの下にNotFound
ビューを作成するのではなく、CategoriesコントローラからCategoryNotFound
ビューを表示します。
これは可能ですか、それとも間違った方法で構造化していますか?これを行うための良い方法はありますか?
はい。既定では、ASP.NET MVCは最初に\Views\[Controller_Dir]\
をチェックインしますが、その後ビューが見つからない場合は\Views\Shared
をチェックインします。
共有ディレクトリは、特に複数のコントローラ間でビューを共有するためにあります。 ViewをSharedサブディレクトリに追加するだけで、問題ありません。
return View("~/Views/Wherever/SomeDir/MyView.aspx")
を実行した場合あなたはあなたが望む任意のビューを返すことができます。
あなたが使用することができます:
return View("../Category/NotFound", model);
ASP.NET MVC 3でテストされていますが、ASP.NET MVC 2でも動作するはずです。
はい、可能です。このようなRedirectToAction()
メソッドを返します:
return RedirectToAction("ActionOrViewName", "ControllerName");
RedirectToAction
を試しましたか?
はい、できます。このようなアクションを返します:
return RedirectToAction("View", "Name of Controller");
例:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");
このアプローチはGETメソッドを呼び出します
また、次のようにアクションに値を渡すこともできます。
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
JavaScript / jQuery から任意のコントローラを呼び出すこともできます。 404または他のユーザーコントロール/ページを返すコントローラがあるとします。それから、何らかのアクションで、あなたのクライアントコードから、あなたはあなたのコントローラを起動しそして HTML というフォーマットで結果を返すアドレスを呼び出すことができます。あなたのページにあなたが欲しい...
このコードを使えば、どんなコントローラでも入手できます。
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);