2012-02-15 205 views
53

我對ASP.Net MVC完全陌生。我剛剛在Visual Studio 2010中創建了一個MVC3項目。視圖引擎是剃鬚刀。當我剛剛運行應用程序時,它在瀏覽器中給出了正確的結果。網址是http://localhost:4163/。然後,我將「Set as Start Page」設置爲〜\ Views \ Home文件夾中的Index.cshtml。然後,當我運行該應用程序的URL變成http://localhost:4148/Views/Home/Index.cshtml,它表示無法找到資源。我該怎麼做才能糾正它? url映射在哪裏完成?ASP.Net MVC - 資源找不到錯誤

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); 
    } 
    } 
} 
+1

發佈您的global.asax文件。包括該方法public static void RegisterRoutes(RouteCollection routes) – Yorgo 2012-02-15 12:55:50

+1

右鍵單擊您的項目>屬性。在StartAction部分的web選項卡中設置StartUrl – Yorgo 2012-02-15 12:58:39

+1

你知道你有不同的端口嗎? (從你的代碼)設置你的端口到特定的端口,你不應該有問題:) ::你的默認網址應該是:「Home/Index」 – cpoDesign 2012-02-15 13:21:41

回答

88

URL映射或「路由」由ASP.NET MVC站點的根目錄中的Global.asax處理。

當您單擊「設爲起始頁」時,它將更改項目設置以查找與該應用程序根相關的文件。但在MVC中,默認路由到您的索引頁實際上是http://localhost:4163/Home/Index - 閱讀類似this的東西,以瞭解路由如何工作。

到現在「修復」項目,它的嘗試(和失敗)導航到該視圖直接,右鍵單擊該項目,然後選擇「Properties」,點擊「Web」選項卡,然後選擇「Specific Page」,留下的文字框空白。現在,當您開始調試時,應該再次進入主頁 - 查看默認路由參數,以瞭解Global.asax中的RegisterRoutes方法的原因

+1

感謝您這....我安裝一個空的MVC應用程序,我不得不手動添加的東西。這固定了我最後的錯誤。 – BoundForGlory 2016-04-28 15:20:29

1

那麼你不能設置在asp.net mvc的默認頁面。
轉到global.asax.cs並查看路由的定義。默認路由指向Index方法HomeController。
我會更好地觀看一些關於asp.net mvc的短片,或者試着找到nerd dinner tutorial,這會讓你很快熟悉這個框架。

我想教程的最佳答案爲這個問題的答案已經提供:

ASP.NET MVC Quick Tutorials

+0

謝謝...你能列出最好的教程嗎?我會看看書呆子晚餐教程。另外,你是否認爲「設置爲起始頁」功能不應該用於MVC項目? – Lijo 2012-02-15 13:02:39

+1

是的!不要在MVC項目中使用該功能 - 它不起作用。而是在Global.asax文件中指定默認路由的參數默認值。 – greg84 2012-02-15 13:14:08

0

asp.net的MVC項目的開始頁面是「當前頁」 defaulty。只需打開一個服務器端文件並啓動項目。通過這種方式,mvc打開作爲項目主控制器的默認控制器

+0

你能解釋一下「服務器端文件」是什麼意思嗎? – Lijo 2012-02-15 13:07:31

+1

像HomeController.cs – Yorgo 2012-02-15 13:14:58

0

您可以更改項目屬性(項目 - >項目屬性)中的起始頁面。在網頁標籤下,您可以選擇specify page並將您的首頁更改爲home/home/index。這將根據您的路線將您引導到適當的頁面。 http://localhost:4148/Views/Home/Index.cshtml的地址無法正常工作,因爲它正根據您的路由進行處理,該路由指出url需要爲http://localhost:4148/ {controller}/{action}和一個可選的/ {id}。

如果您想了解更多關於路由看看here.

2

在「設置爲起始頁」 asp.net的MVC不能使用選項,因爲MVC的觀點是不是獨立的,像Web窗體頁。它只是用於顯示模型的模板文件。他們沒有處理http模塊。所有的Web請求都應該通過控制器操作,您不能直接請求視圖。

23

確保在控制器文件夾中創建了HomeController.cs類。

+2

這是我的問題,我有一個「默認」控制器,所以我將controller =「Home」更改爲controller =「Default」,並在此之後生效。 – M3NTA7 2013-11-11 03:27:39

1

前段時間我在使用VS 2012時遇到了類似的問題。 通過單擊Build> Rebuild重建應用程序來解決。

0

要查看您查看這樣的:

http://localhost:1234/x/MyView 

在xController.cs文件,控制器文件夾下,

確保您添加這樣一個ActionResult方法:

public ActionResult MyView() 
{ 
    return View(whatever); 
} 

當我沒有正確引用我的型號名稱時,我也收到了此消息:

@u (Html.BeginForm(「MyView」,「MyModel」,FormMethod.Get))

1

如果您使用的是IIS Express。這可能是因爲你打開了另一個使用相同虛擬目錄的項目。當你打開第二個解決方案VS將該IIS目錄重新映射到另一個位置。因此,它不會適用於不同的問題。我有同樣的錯誤作爲主題首發。

解決方法:關閉VS Studio的所有實例。打開VS你正在工作的項目&重建。

+0

這個答案讓我想到了我的解決方案。我將一個項目複製到一個新的解決方案中,由於與OP相同的錯誤,我無法使其工作。我查看了IIS Express使用的applicationhost.config文件,發現它具有帶有相同網站名稱和(1)的額外記錄。我刪除了.vs文件夾。清潔和重建。然後它工作。它可能只會刪除項目中的applicationhost.config而不是整個.vs文件夾。 – Soenhay 2017-02-05 01:12:34

1

只需在此處添加此項 - 如果有人遇到問題,主控制器上的索引頁不再加載,可能是因爲您尚未設置啓動項目。右鍵單擊您希望應用程序啓動的項目並將其設置爲啓動項目,並且應該很好。

9

在我遇到的類似問題中,我的Action有一個HTTP「POST」屬性,但我試圖打開該頁面(默認爲「GET」)。所以我不得不創建一個HTTP「GET」版本。

5

按照以下步驟運行你的asp.net mvc應用程序。

  • 控制器創建
    右鍵單擊控制器文件夾並添加控制器。 注 - 不要刪除控制器後綴。它的ASP.NET MVC約定。
    爲控制器命名爲「DemoController」,您可以在「DemoController」中看到「Index」操作。當您創建控制器時,「索引」是默認動作。

  • 視圖創建
    的「指數」行動名字上點擊右鍵,並保持 默認視圖名稱即「指數」,並點擊「添加」按鈕。

  • 路由設置
    打開Global.asax文件,然後你會看到路線 的默認設置被映射到「家」控制器和「索引」的行動改變爲「演示」 控制器和「索引」行動。 URL映射寫入Global.asax 文件中。當你打開全球。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 
        ); 
    

和運行應用程序,你可以看到工作中的應用程序。

在瀏覽器輸入的地址欄這樣
0

: ControllerName/ActionMethod 不輸入ControllerName/VIEWNAME 例如 在地址欄:http://localhost:55029/test2/getview CSHTML文件代碼:

@{ 
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"); 
} 
0

如果你已經嘗試了所有上述解決方案,問題仍然存在,那麼使用這個簡單的lution。 打開從這個link的調試器,鍵入頁面url並點擊獲取新的Scrape信息按鈕。這將解決您的問題。

背後的原因(我認爲)是Facebook的API API保存頁面的當前狀態,並顯示自己的服務器。如果您在編碼時單擊共享按鈕,並且您的頁面實際上未上傳,則Facebook api無法在服務器上找到該頁面,並將頁面狀態保存爲「找不到資源」。即使在您上傳頁面後,它仍然會顯示相同的信息。當您從Facebook調試器獲取頁面時,它會從頭開始解決所有問題並保存頁面的當前狀態,然後您的分享按鈕開始工作,而不會對編碼進行任何更改。

-2

通過右鍵單擊我想要的啓動頁面的視圖解決了這個問題。顯示錯誤「找不到您正在尋找的資源」只需右鍵單擊您的項目,進入Web並選擇當前頁面。這將解決這個問題

6

我也得到了相同的HTML-404錯誤:

The resource cannot be found.Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

但仔細檢查後,我發現我已經離開了控制器Default1Controller的名稱,而不是改變它的到HomeController 。當我做出改變並調試了它的工作。希望它會幫助你,如果你有同樣的問題。

0

我有同樣的排序問題,除了我沒有使用該名稱Index.cshtmlView,我把它例如LandingPage.cshtml,我的問題是,在我的控制器的ActionResult是不一樣的名字我的視圖名稱(在這種情況下,我的ActionResult被稱爲Index()) - 這實際上是顯而易見的,從我的角度來看這是一個愚蠢的錯誤,但是對於MVC來說是新的,所以我將在這裏和那裏基本失敗。

所以在我的情況下,我需要改變我的ActionResult是相同的名稱,我ViewLandingPage.cshtml

public ActionResult LandingPage() 
    { 
     ProjectDetailsViewModels PD = new ProjectDetailsViewModels(); 
     List<ProjectDetail> PDList = new List<ProjectDetail>(); 

     PDList = GetProductList(); 
     PD.Projectmodel = PDList; 


     return View(PD); 
    } 

我是新來的MVC,也許這將幫助別人誰是新的,而疲於應付我也做過同樣的事情。

1

(MVC 5):更改RouteConfig.cs包括兩個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}"並取代默認語言,並重定向到其餘路由...

2

令人難以置信的是,我不小心從控制器中刪除了公開關鍵字!

enter image description here

我想這將有助於精確沒有其他人,但你永遠不知道...

+2

你錯了。 – wannabeLearner 2017-03-21 10:14:46

0

對我來說,問題是由一個命名空間的問題引起的。

我已經將我的項目名稱空間從MyProject更新到MyProject.Web,但我忘記了更新項目屬性>>默認名稱空間。因此,當我添加一個新的控制器時,它使用舊的命名空間。我所要做的只是糾正新控制器中的命名空間,並且它工作正常。

相關問題