[解決済み] コントローラから別のコントローラの部分ビューを返すには?
質問
私は
XXX.cshtml
ファイルを
Views\ABC
フォルダの中にあります。そのコントローラは
ABC
また、アクションメソッドを
DEF
コントローラで
Partialview("XXX" , xyzmodel)
ビューが見つかりません"というエラーが出ます。
どのようにその ビュー を他のコントローラから呼び出すには
どのように解決するのですか?
通常、ビューには特定の
対応するコントローラ
に属するか、あるいはビューがそのデータ要件をサポートする
Views/Shared
フォルダに属します (これが名前の由来です)。
"回答"(ただし、推奨されません - 下記参照)。
あなたは できます のようにフルパス(拡張子を含む)を指定することで、別のコントローラからビュー/部分ビューを参照することができます。
return PartialView("~/views/ABC/XXX.cshtml", zyxmodel);
または相対パス(拡張子なし)を指定します。
@Max Toro
return PartialView("../ABC/XXX", zyxmodel);
しかし、これはとにかく良いアイデアではありません
*注:これらは
の2つの構文だけです。
ではありません。
ABC\\XXX
または
ABC/XXX
などのバリエーションがありますが、これらはすべて相対パスであるため、一致するものが見つかりません。
より良い代替案
あなたは
Html.Renderpartial
を使うこともできますが、その場合にも拡張機能が必要です。
Html.RenderPartial("~/Views/ControllerName/ViewName.cshtml", modeldata);
使用方法
@Html.Partial
を使ってください。
@Html.Partial("~/Views/ControllerName/ViewName.cshtml", modeldata)
を使うことができます。
../controller/view
の構文を拡張なしで使うことができます (再度 @Max Toro の功績です)。
@Html.Partial("../ControllerName/ViewName", modeldata)
注:どうやら
RenderPartial
は Partial よりも若干速いようですが、それは重要ではありません。
実際に他のコントローラを呼び出したい場合は、使用します。
@Html.Action("action", "controller", parameters)
推奨される解決策 Html.Action
私の個人的な好みは
@Html.Action
を使用することで、他のコントローラからビューを相互参照するのではなく、各コントローラが独自のビューを管理することができるからです (これは大きなスパゲッティのような混乱につながります)。
通常は、必要なキー値のみを渡します (他のビューと同様です)。
@Html.Action("XXX", "ABC", new {id = model.xyzId })
これは
ABC.XXX
アクションを実行し、その結果をインプレースでレンダリングします。これにより、ビューとコントローラを別々に自己完結させることができます(つまり、再利用可能)。
2014年9月更新です。
この度、@Html.Actionは使えないが、ビューパスを作成する必要がある状況にぶち当たりました。
action
と
controller
という名前を付けることができます。そのために、私はこの単純な
View
に拡張メソッドを追加しました。
UrlHelper
であるため、return
PartialView(Url.View("actionName", "controllerName"), modelData)
:
public static class UrlHelperExtension
{
/// <summary>
/// Return a view path based on an action name and controller name
/// </summary>
/// <param name="url">Context for extension method</param>
/// <param name="action">Action name</param>
/// <param name="controller">Controller name</param>
/// <returns>A string in the form "~/views/{controller}/{action}.cshtml</returns>
public static string View(this UrlHelper url, string action, string controller)
{
return string.Format("~/Views/{1}/{0}.cshtml", action, controller);
}
}
関連
-
[解決済み] 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しない
-
[解決済み] Home'という名前のコントローラに一致するタイプが複数見つかりました。
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み】ASP.NET MVCで別のコントローラからビューを表示する
-
[解決済み】異なるフォルダ(非共有)から部分的にレンダリングする。)
-
[解決済み] コントローラ名とアクション名をコントローラ内から取得する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である