2016-03-29 20 views
2

私はASP.NET MVCをかなり新しくしています。私は2つの簡単なコントローラを持っています。 1つのメインコントローラと1つは部分表示用です。私は、コードを変更した場合部分表示のフルパスを提供する必要があるのはなぜですか?

The partial view '_MyPartialView' was not found or no view engine supports the searched locations.

:パーシャルビューコントローラでは、私は上記の次のエラーがスローされます

@Html.Action("PartialSection", "MyPartialController") 

を行うメインビューに、次のスニペット

public PartialViewResult PartialSection() 
{ 
    //query for partial view model 

    return PartialView("MyPartialView", viewModel); 
} 

を持っています私のパーシャルビューコントローラでは、部分的に完全なパスを提供します。

return PartialView("~/Views/Common/_MyPartialView.cshtml", viewModel); 

次に、エラーは発生せず、部分表示が期待通りに表示されます。

なぜ私はPartialViewへの完全なパスを別のコントローラから呼び出すときにそれを提供しなければならないのですか?

答えて

4

を試してみてくださいビューを取得するために使用します。

フォルダの下に_MyPartialView.cshtmlビュー>>あなたのビューを配置した場合MyPartial >>、あなたは完全なパスを記述する必要はありませんが、あなたは新しいフォルダ名を作成しているよう共通フレームワークにはありませんビューが返されるように要求されたときにも、そのフォルダを参照する必要があることを理解してください。

デフォルトでは、フレームワークは2つの場所でのみビューファイルを探します。 ビュー内部コントローラという名前のディレクトリに対する

1)フォルダフォルダは

2)ビューでフォルダを共有ディレクトリ

あなたはしたくない場合それを保持したい場合は、共通のフォルダにすることができます。この場合、フレームワークにカスタムフォルダも表示するように指示する必要があります。

あなたはGlobal.asaxApplication_StartイベントにPartialViews探さなければ、あなたのカスタムフォルダを登録することができます:あなたはこのblogpost for details.

+0

さらに良い点は、共通のビューを共有フォルダに置くだけです。大会を利用して幸せになれます。 –

+0

これはありがとうございます。私は理解しやすくなりました:) – Izzy

+0

@EduardoMolteniはい、時には何らかの理由でビューを違うように整理したいので、共有フォルダが大きなビューのリストにならないことがあります –

0

代わり

@Html.Action("PartialSection", "MyPartialController") 

のようMyPartialController

からコントローラを削除するには、カスタムフォルダを使用しての代わりに、どのフレームワーク既存のフォルダを使用しているので、あなたは完全なパスを渡す必要が

@Html.Action("PartialSection", "MyPartial") 
+0

あなたの助けをありがとう@EʜsᴀɴSᴀᴊᴊᴀᴅ[回答](http://stackoverflow.com/a/36285847/3793448)は私の問題を解決しました。 – Izzy

0

で見ることができ

RazorViewEngine razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault(); 
if (razorEngine != null) 
{ 
    var newPartialViewFormats = new[] 
           { 
           "~/Views/Common/{0}.cshtml" 
           }; 
    razorEngine.PartialViewLocationFormats = razorEngine.PartialViewLocationFormats.Union(newPartialViewFormats).ToArray(); 
} 

は、以下のように実行します。

public PartialViewResult PartialSection() 
{ 
    //query for partial view model 

    return PartialView("_MyPartialView", viewModel); 
} 

をそして、以下のように電話してください:

@Html.Action("PartialSection", "MyPartial") 
関連する問題