2016-05-02 104 views
0

我一直在爲此奮鬥了很多天。我是MVC的新手,我堅持這些問題。我有一個mvc應用程序。以下是我從之前的帖子瞭解到的我的route.config文件不正確。我的頁面非常簡單,除了一頁外,沒有查詢字符串。每一頁都是控制器/視圖格式。什麼是這種配置的正確路由配置。如果有人能夠用一點解釋來幫助我,那就太好了。當我在IIS中部署該應用程序時,我遇到了此路由的問題。 當我在IIS部署和我做一個瀏覽它直接進入我的登錄頁面,這是很好的,但在內部它要MVC路由和部署

http://localhost/Home/accountdetails 

,而不是去

http://localhost/MyWebsite/Home/accountdetails 

由於我m到處404錯誤。我不明白如何設置它。另外我的圖片這是在內容的文件夾沒有顯示出來或者bcoz他們指的是

http://localhost/Content/Images/myimage 

,而他們實際上是在

http://localhost/MySite/Content/Images/myimage 

我怎樣才能糾正這些問題。請在這裏提供一些幫助。

這裏是我的route.config

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

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

     routes.MapRoute(
     name: "Invoice", 
     url: "{controller}/{action}/{q}", 
     defaults: new 
     { 
      controller = "Home", 
      action = "GetInvoice", 
      id = 
       UrlParameter.Optional 
     } 
     ); 

     routes.MapRoute(
      name: "Error", 
      url: "{controller}/{action}/{id}", 
      defaults: new 
      { 
       controller = "Home", 
       action = "Error", 
       id = 
        UrlParameter.Optional 
      } 
     ); 
     routes.MapRoute(
      name: "ResetPassword", 
      url: "{controller}/{action}/{id}", 
      defaults: new 
      { 
       controller = "Home", 
       action = "ResetPassword", 
       id 
        = UrlParameter.Optional 
      } 
     ); 
     routes.MapRoute(
      name: "Accounts", 
      url: "{controller}/{action}/{id}", 
      defaults: new 
      { 
       controller = "Home", 
       action = "AccountStatus", 
       id 
        = UrlParameter.Optional 
      } 
    ); 

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


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

更新

對於我設置背景圖片如下

<div class="bannerOuter" style="background-image: url('../../Content/Images/AccountStatus_cropped-23.jpg');"> 

圖像,但發佈後,當我運行應用程序,我按f12我看到它指圖像的下面的URL並引發404錯誤。

http://localhost/Content/Images/Accounts_cropped-23.jpg 

但我可以瀏覽它,如果我更改網址以添加我在IIS中指定的網站名稱。

http://localhost/MyWebsite/Content/Images/Accounts_cropped-23.jpg 

所以這就是問題在這種情況下應該是我的圖像路徑。

編輯

@Html.EncodedActionLink(string.Format("{0} Statement", @Convert.ToDateTime(@invoiceItem.InvoiceDate).ToString("MMMM")), "GetInvoice", "Home", new { accountNumber = Model.CustomerModel.AccountNumber, dueDate = (Convert.ToDateTime(invoiceItem.DueDate).ToString("dd-MMM-yyyy")) }, new { target = "_blank", @class = "Link" }) 

所以這裏的網址即將爲

http://localhost/Home/GetInvoice?q=ZDmgxmJVjTEfvmkpyl8GGWP4XHfvR%2fyCFJlJM1s0vKj4J6lYJWyEA4QHBMb7kUJq 

我能怎樣改變是在內嵌CSS

http://localhost/MySite/Home/GetInvoice?q=ZDmgxmJVjTEfvmkpyl8GGWP4XHfvR%2fyCFJlJM1s0vKj4J6lYJWyEA4QHBMb7kUJq 
+0

所有的路由具有完全相同的url模式; 「家」路線總是首先匹配,其餘的將被完全忽略。根據您的描述,您不需要超出「家庭」路線的任何內容。至於超鏈接和圖片,我們需要看看你在視圖中是如何引用它們的。 –

+0

謝謝..我做了你的建議,它似乎確定的意見..但圖像..請參閱我的編輯 – Blossom

回答

1

相對路徑是有問題的,因爲它將相對於當前的URL。所以如果你去http://localhost/MySite/Home/Login你需要使用../../Content/myimage.png。但是,如果您轉到http://localhost/MySite,則route.config中的默認控制器和操作(Home/Login)將啓動,現在映像的相對路徑爲Content/myimage.png,因爲控制器和操作未顯式位於URL中。如果你去http://localhost/MySite/Home會發生同樣的問題;將使用默認操作(Login),相對路徑爲../Content/myimage.png

最好的解決方案是在CSS文件中使用樣式,而不是使用內聯樣式;這樣,圖像URL總是相對於CSS文件而言的,該文件的URL永遠不會變化。要知道,如果你使用的BundleConfig.cs捆綁你需要確保道路保持一致MVC Bundling and CSS relative URLs

但是,如果你需要使用內聯樣式,你可以使用@Url.Content()始終得到正確的路徑,與~是根你應用:

style="background-image: url('@Url.Content("~/Content/myimage.png")'"

+0

偉大..感謝你這麼多的工作。還有一個問題,我怎麼用錨標籤來做到這一點?我正忙於生成一個pdf文件,它接受了我編碼的查詢字符串參數。所以我寫了一個htmlhelper擴展方法,就像我在上面編輯的那樣。即使我有相同的問題,它需要相對的網址,我不知道如何提及實際的網址。希望你能幫助 – Blossom