ビューまたはそのマスターが見つからなかったか、検索された場所をサポートするビューエンジンがありません


80

次のようなエラー:ビュー 'LoginRegister'またはそのマスターが見つからなかったか、検索された場所をサポートするビューエンジンがありません。次の場所が検索されました。

〜/ Views / MyAccount / LoginRegister.aspx

〜/ Views / MyAccount / LoginRegister.ascx

〜/ Views / Shared / LoginRegister.aspx

〜/ Views / Shared / LoginRegister.ascx

〜/ Views / MyAccount / LoginRegister.cshtml

〜/ Views / MyAccount / LoginRegister.vbhtml

〜/ Views / Shared / LoginRegister.cshtml

〜/ Views / Shared / LoginRegister.vbhtml

実際、私のページビューページは ~/Views/home/LoginRegister.cshtmlそうです

そして私のRouteConfig

 public class RouteConfig
    {

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "MyAccount", action = "LoginRegister", id = UrlParameter.Optional }
            );
        }
    }

LoginResiterビューを正しいフォルダー(MyAccountコントローラー用)に移動します。
マンスフィールド

コントローラ?しかし、私のページは表示されています
user2564537 2013

2
ASP.NET MVCは、特定のコントローラーのビューが共有フォルダーまたはコントローラーの名前のフォルダーのいずれかにあることを想定しています。ご覧のとおり、「MyAccount」フォルダと「Shared」フォルダを検索しています。コントローラーでビューを使用する場合は、そのコントローラー名のフォルダーにビューを配置する必要があります。ルート構成とは何の関係もありません。
マンスフィールド

8
サイトを別のコンピューターに公開した後、このエラーが発生しました。それは判明ビューでビルド・アクションに設定されたNone代わりにContent、それらを切り替えて再発行(または単にファイルをコピーする)ように働きました。
パトリック

回答:


108

View(string、string)の2番目のパラメーターはmodelではなくmasterNameであるため、モデルタイプがStringの場合は注意してください。2番目のパラメーターとしてobject(model)を使用してオーバーロードを呼び出す必要がある場合があります。

正しくありません :

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",msg);
}

正解:

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",(object)msg);
}

または(bradlis7によって提供されます):

protected ActionResult ShowMessageResult(string msg)
{
    return View("Message",model:msg);
}

16
代わりにキャストする(object)msg、明示的に引数を指定:return View("Message", model: msg);
bradlis7

1
これは素晴らしい答えです
JsonStatham

31

問題:

Viewデフォルトの場所であなたを見つけることができません。

説明:

ビューは、Controllerまたはと同じ名前のSharedフォルダーにある必要があります。

解決:

をフォルダに移動するか、ViewMyAccount作成しHomeControllerます。

代替案:

移動しViewたり、新しいものControllerを作成したりしたくない場合は、このリンクで確認できます。


3
さらに、私が見つけたこの問題が発生している場合は、ビューを削除することをお勧めします。(内容をnotepadd ++にコピーします)コントローラーに移動し、アクション結果を右クリックして[ビューの生成]を選択すると、コントローラーがビューを探していた場所を確認し、それに応じてビューを配置できます。
ビルブランケンシップ2014年

14

Microsoft ASP.net MVCでは、着信URLと発信URLの組み合わせを解析するために使用されるルーティングエンジンは、設定より規約という考え方で設計されています。これが意味するのは、ルーティングエンジンが使用する規則(ルール)に従えば、構成を変更する必要がないということです。

ASP.net MVCのルーティングエンジンは、Webページ(.cshtml)を提供しません。これは、URLをコード内のクラスで処理する方法を提供します。これにより、text / htmlを出力ストリームにレンダリングしたり、Conventionを使用して一貫した方法で.cshtmlファイルを解析および提供したりできます。

ルーティングに使用される規則は、コントローラーを次のような名前のクラスに一致させることです。ControllerNameControllerつまり、という名前のクラスをcontroller="MyAccount"見つけることを意味しますMyAccountController。次に、アクションがありますActionResult。これは、通常はを返すコントローラークラス内の関数にマップされます。つまり、コントローラーのクラスでaction="LoginRegister"関数を探しますpublic ActionResult LoginRegister(){}。この関数は、View()名前が付けられたコンベンションによるaを返す場合がありLoginRegister.cshtml/Views/MyAccount/フォルダーに格納されます。

要約すると、次のコードがあります。

/Controllers/MyAccountController.cs:

public class MyAccountController : Controller 
{
    public ActionResult LoginRegister()
    {
        return View();
    }
}

/Views/MyAccount/LoginRegister.cshtml:ビューファイル。


8

ビューを返すときのLoginRegisterアクションで、以下を実行します。これはmvc 5で実行できることはわかっていますが、mvc4でも実行できるかどうかはわかりません。

 public ActionResult Index()
 {
     return View("~/Views/home/LoginRegister.cshtml");
 }

5

ビュー(.cshtmlファイル)のビルドアクションを確認してください。コンテンツに設定する必要があります。場合によっては、ビルドアクションが(誤って)[なし]に設定されており、有効なフォルダーの下のVisual Studioプロジェクトファイルにそのビューが表示されていても、この特定のビューがターゲットマシンに展開されていないことがわかりました。


1
私の場合、これは「Build Action」プロパティにも関連していましたが、「Embedded Resource」に設定する必要がありました
AliTahouri19年

3

これは権限の問題である可能性があります。

最近同じ問題が発生しました。テストとして、簡単なhello.htmlページを作成しました。ロードしようとすると、権限に関するエラーメッセージが表示されました。ルートWebフォルダーのアクセス許可の問題を修正すると、htmlページとMVCレンダリングの両方の問題が解決されました。


私の場合も権限の問題であり、認証されたユーザーがアプリケーションのルートフォルダーにアクセスできるようにし、読み取り専用フラグを削除すると問題が修正されました
Momin

2

作成したビュー(.ASPXファイル)の名前がコントローラーに記載されているものと同じであるかどうかを確認します。例:

 public ActionResult GetView()
 {
    return View("MyView");
 }

この場合、aspxファイルの名前はGetView.aspxではなくMyView.aspxである必要があります。


2

ビュー(およびPOSTアクション)の名前を変更したため、このエラーが発生しました。

最後に、GETアクションとPOSTアクションの両方の名前を新しい名前に変更するのを忘れていることがわかりました。

解決策:ビュー名と一致するよう、GETアクションとPOSTアクションの両方の名前を変更します。


1

本番環境で問題が断続的に発生する場合は、アクションメソッドが中断されたことが原因である可能性があります。たとえば、大きなファイルのアップロードを伴うPOST操作中、ユーザーはアップロードが完了する前にブラウザウィンドウを閉じます。この場合、actionメソッドは、nullモデルまたはビューオブジェクトに起因するnull参照例外をスローする可能性があります。解決策は、メソッド本体をtry / catchでラップし、nullを返すことです。このような:

[HttpPost]
public ActionResult Post(...)
{
    try
    {
        ...
    }
    catch (NullReferenceException ex)  // could happen if POST is interrupted
    {
        // perhaps log a warning here
        return null;
    }

    return View(model);
}

1

私はこれと同じ問題を抱えていました。ビュー「Movie」をコピーし、それに応じて「Customer」に名前を変更しました。モデルとコントローラーについても同じことをしました。

解決策は次のとおりです... Customer Viewの名前をCustomer1に変更し、新しいビューを作成してCustomerと呼びました...次にCustomer1コードをCustomerにコピーしました。

これはうまくいきました。

問題の本当の原因を知りたいです。

更新 ただニヤリと....私は戻ってすべての名前変更シナリオを再度複製しました...そしてエラーは発生しませんでした。


0

上記の回答(よくある間違い)からすべてを確認し、ビューが例外の場所にあることが確実な場合は、VisualStudioを再起動する必要があります。

:(


0

私の場合、問題を解決するためにRedirectToActionを使用する必要がありました。

[HttpGet]
[ControleDeAcessoAuthorize("Report/ExportToPDF")]
public ActionResult ExportToPDF(int id, string month, string output)
{
    try
    {
        // Validate
        if (output != "PDF")
        {
            throw new Exception("Invalid output.");
        }
        else
        {
            ...// code to generate report in PDF format
        }
    }
    catch (Exception ex)
    {
        return RedirectToAction("Error");
    }
}

[ControleDeAcessoAuthorize("Report/Error")]
public ActionResult Error()
{
    return View();
}

0

私はしばらく前にこれに遭遇しました、そしてそれが単純であることがわかったのでそれは私を夢中にさせました。そのため、ビュー内で、httpリクエストを介してグリッドのデータを取得するグリッドコントロールを使用していました。中間層がリクエストを完了してデータセットを返すと、同じエラーが発生しました。私のreturnステートメントは「returnView(dataset);」でした。'の代わりにJson(dataset);を返します。


0

ステートメントの不適切な終了が原因でこのエラーに遭遇しました。

@using(Html.BeginForm( "DeleteSelected"、 "Employee"、FormMethod.Post))

{{

} //この中括弧は最後に閉じる必要がありました。

Index.cshtmlビューファイルで、プログラムの最後にステートメントを閉じませんでした。代わりに、私は不適切に閉じてしまい、このエラーに遭遇しました。

Controllerメソッドをビューに正しく戻したので、ControllerActionMethodコードをチェックする必要はないと確信していました。したがって、応答せず、同様のエラーが発生したビューである必要があります。


0

ファイルが存在しないことがわかるまで、この問題の解決策を見つけることができませんでした。ソリューションエクスプローラーにファイルが表示されるため、これを理解するのに長い時間がかかりました。

ここに画像の説明を入力してください

しかし、Index.cshtmlをクリックすると、次のエラーが発生します。

ここに画像の説明を入力してください

これが、このエラーが表示される理由です。この答えが誰かに役立つことを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.