私はASP.Net MVCを初めて使用します。 Visual Studio 2010でMVC3プロジェクトを作成しました。ビューエンジンはかみそりです。アプリケーションを実行したところ、ブラウザで適切な結果が得られました。 URLは http:// localhost:4163 / です。次に、「開始ページとして設定」を〜\ Views\Homeフォルダー内のIndex.cshtmlに適用しました。次に、アプリケーションを実行すると、URLが http:// localhost:4148/Views/Home/Index.cshtml になり、リソースが見つからないというメッセージが表示されました。修正するにはどうすればよいですか? URLマッピングはどこで行われますか?
Global.asaxファイル:
using System.Web.Mvc;
using System.Web.Routing;
namespace TEST
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
}
URLマッピングまたは「ルーティング」は、ASP.NET MVCサイトのルートにあるGlobal.asaxによって処理されます。
[開始ページとして設定]をクリックすると、プロジェクトの設定が変更され、アプリケーションルートを基準にしてそのファイルが検索されます。しかし、MVCでは、インデックスページへのdefaultルートは実際にはhttp://localhost:4163/Home/Index
です- this のようなものを読んでルーティングの仕組みのアイデア。
ビューに直接移動しようとしている(および失敗している)プロジェクトを「修正」するには、プロジェクトを右クリックして「Properties
」を選択し、「Web
」タブをクリックして「Specific Page
"、テキストボックスを空白のままにします。デバッグを開始すると、ホームページに再度アクセスする必要があります。デフォルトのルートパラメータを見て、Global.asaxのRegisterRoutesメソッドで理由を確認してください。
コントローラーフォルダーにHomeController.csクラスを作成したことを確認してください。
私が直面した同様の問題で、アクションにはHTTP「POST」属性がありましたが、ページを開こうとしました(デフォルトでは「GET」です)。
そのため、HTTP「GET」バージョンを作成する必要がありました。
私も同じhtml-404エラーを受け取りました:
リソースが見つかりません。説明:HTTP404。探しているリソース(またはその依存関係の1つ)が削除されたか、名前が変更されたか、一時的に使用できません。次のURLを確認して、スペルが正しいことを確認してください。
しかし綿密な調査の結果、コントローラーの名前をHomeController
に変更するのではなく、Default1Controller
のままにしていたことがわかりました。変更を加えてアプリをデバッグすると、機能しました。同じ問題がある場合に役立つことを願っています。
以下の手順に従って、asp.net mvcアプリケーションを実行します。
コントローラー作成
controllersフォルダーを右クリックして、コントローラーを追加します。注-コントローラーの接尾辞は削除しないでください。そのASP.NET MVC規則。
コントローラーに「DemoController」という名前を付けると、「DemoController」に「Index」アクションが表示されます。 「インデックス」は、コントローラーを作成するときに存在するデフォルトのアクションです。
ビュー作成
「インデックス」アクション名を右クリックし、デフォルトのビュー名、つまり「インデックス」を保持して、「追加」ボタンをクリックします。
ルート設定
Global.asaxファイルを開くと、ルートのデフォルト設定が「Home」コントローラーにマッピングされ、「Index」アクションが「Demo」コントローラーと「Index」アクションに変更されます。 URLマッピングはGlobal.asaxファイルに書き込まれます。 Global.asaxファイルを開くと、以下の設定が表示されます。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
次のように変更します。
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Demo", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
アプリケーションを実行すると、アプリケーションが機能していることがわかります。
Asp.net mvcでデフォルトページを設定することはできません。
global.asax.csに移動して、ルーティングの定義を確認します。デフォルトルートは、IndexメソッドHomeControllerを指します。
asp.net mvcに関する短い映画を見るか、フレームワークにすぐに慣れる nerd dinner tutorial を見つけてください。
チュートリアルに関する最良の回答は、この質問に対する回答としてすでに提供されていると思います。
VS 2012を使用しているときに似たような問題がありました。[ビルド]> [再構築]をクリックしてアプリケーションを再構築するだけで解決しました。
Asp.net mvcでは、mvcビューはWebフォームページのように独立していないため、「開始ページとして設定」オプションを使用できません。モデルを表示するためのテンプレートファイルのみです。処理HTTPモジュールはありません。すべてのWeb要求はコントローラーアクションを通過する必要があり、ビューを直接要求することはできません。
ここにこれを追加するだけです。HomeControllerのインデックスページがロードされないという問題が発生した場合は、StartUp Projectをまだ設定していない可能性があります。アプリを開始するプロジェクトを右クリックして、スタートアッププロジェクトとして設定すると、準備が整います。
IIS Expressを使用している場合。同じ仮想ディレクトリを使用する別のプロジェクトを開いた可能性があります。 2番目のソリューションを開いたとき、VSはそのIISディレクトリを別の場所に再マッピングします。その結果、さまざまな問題では機能しません。トピックスターターと同じエラーが発生しました。
修正するには:VS Studioのすべてのインスタンスを閉じます。作業中のプロジェクトでVSを開き、再構築します。
(MVC 5):RouteConfig.cs
を次のように2つのroutes
を含むように変更します。
routes.MapRoute(
name: "DefaultWithLanguage",
url: "{language}/{controller}/{action}/{id}",
defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new {language= "[a-z]{2}"}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { language = "fa", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
したがって、ルートの言語部分が指定されていない場合、正規表現"[a-z]{2}"
と一致しないコントローラー名を間違えず、デフォルト言語を置き換え、残りのルートにリダイレクトします...
上記の解決策をすべて試しても問題が解決しない場合は、この簡単な解決策を使用してください。これからfacebookデバッガーを開きます link 、ページのURLを入力し、[新しいスクレイプ情報を取得]ボタンをクリックします。これで問題が解決します。
背後にある理由(私が思うに)は、facebook apiがページの現在の状態を保存し、独自のサーバーから同じものを表示することです。コーディング中に共有ボタンをクリックしてもページが実際にアップロードされない場合、facebook apiはサーバー上でそのページを見つけることができず、ページの状態を「リソースが見つかりません」として保存します。これで、ページをアップロードした後でも同じメッセージが表示され続けます。 Facebookデバッガーからページを取得すると、すべてがゼロから解決され、ページの現在の状態が保存され、コーディングを変更せずに共有ボタンが機能し始めます。
UsersControllerというコントローラーがあったので、以下のようにデフォルトのコントローラーをHomeからusersControllerに変更して、スタートページを作成しようとしました。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "usersController", action = "Index", id = UrlParameter.Optional }
);
}
解決策は、コントローラのデフォルト値をusersControllerではなくユーザーに変更することでした
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "users", action = "Index", id = UrlParameter.Optional }
);
}
次のようなブラウザ入力のアドレスバー:ControllerName/ActionMethodは、たとえばアドレスバーにControllerName/ViewNameを入力しません: http:// localhost:55029/test2/getview cshtml file code:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head>
<body>
<div>
</div>
</body>
</html>
およびcsファイルコード:
public ActionResult GetView()
{
return View("MyView");
}
私にとって、問題は名前空間の問題が原因でした。
Webプロジェクトクラスのプロジェクト名前空間をMyProjectからMyProject.Webに更新しましたが、プロジェクトプロパティ>>デフォルト名前空間を更新するのを忘れていました。したがって、新しいコントローラーを追加したとき、古い名前空間を使用していました。私がしなければならなかったのは、新しいコントローラーの名前空間を修正するだけで、うまくいきました。
asp.net mvcプロジェクトの開始ページは、デフォルトで「現在のページ」です。サーバー側のファイルを開いてプロジェクトを開始するだけです。その方法で、mvcはプロジェクトのホームコントローラーであるデフォルトのコントローラーを開きます
HomeController.csを使用した簡単なソリューション:
Controllersフォルダーの下のHomeController.csファイルを開きます。コードを追加します。
public ActionResult Edit()
{
return View();
}
ここで、異なるコントローラー(HomeControllerではない)を使用している場合:
このようなビューを表示するには:
http://localhost:1234/xyz/MyView
XyzController.csファイルのControllersフォルダーで、
次のようなActionResultメソッドを必ず追加してください。
public ActionResult MyView()
{
return View(myView); //pass in your view if you want.
}
モデル名を正しく参照していなかったときにもこのメッセージが表示されました。
@using(Html.BeginForm( "MyView"、 "MyModel"、FormMethod.Get))
私は同じ種類の問題を抱えていましたが、View
にIndex.cshtml
という名前を使用していませんでした。たとえば、LandingPage.cshtml
にしたのは、ActionResult
が私のコントローラーはビュー名と同じ名前ではありませんでした(この場合、ActionResultはIndex()と呼ばれていました)-これは実際には明らかであり、私の部分からは愚かな間違いですが、MVCには新しいので、ここで基本的に失敗しますそしてそこに。
したがって、私の場合、ActionResult
をView
と同じ名前に変更する必要がありました:LandingPage.cshtml
public ActionResult LandingPage()
{
ProjectDetailsViewModels PD = new ProjectDetailsViewModels();
List<ProjectDetail> PDList = new List<ProjectDetail>();
PDList = GetProductList();
PD.Projectmodel = PDList;
return View(PD);
}
私はMVCが初めてなので、おそらくこれは、新しくて私と同じことに苦労している誰かを助けるでしょう。
プロジェクトのプロパティ内の開始ページを変更できます(プロジェクト->プロジェクトプロパティ)。 Webタブでspecify page
を選択し、開始ページをhome/
またはhome/index
に変更できます。これにより、ルートに従って適切なページが表示されます。 http:// localhost:4148/Views/Home/Index.cshtml のアドレスは、URLが必要であることを示すルートに従って処理されているため、特に機能しません http:// localhost:4148 / {controller}/{action}およびオプションの/ {id}。
ルーティングの詳細については、こちらをご覧ください こちら