2016-05-02 20 views
0

私は今、これを数日間苦労しています。私はMVCの初心者ですが、私はこれらの問題についていません。私はmvcアプリケーションを持っています。以下は私が前の投稿から理解しているroute.configファイルが適切でないことです。私のページはかなり簡単ですが、1ページを除いてクエリ文字列はありません。すべてのページはコントローラ/ビュー形式です。そのような構成に対して正しいルーティング設定は何でしょうか。もし誰かが少しの説明でそれを手伝ってくれたら、それはすばらしいことになるでしょう。 IISでそのアプリケーションをデプロイすると、このルーティングに問題があります。 私はIISに展開し、私はそれが直接良いのですが、内部的にはMVCのルーティングとデプロイメント

http://localhost/Home/accountdetails 

の代わりによりこれに

http://localhost/MyWebsite/Home/accountdetails 

に行くに行く私のログインページに行き、閲覧を行うときに私が取得メートル404エラー。私はこれを設定する方法を理解していません。また、コンテンツフォルダにある私のイメージは、彼らが

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

の下でどのように私は、これらの問題を修正することができ、実際にしている間、彼らは

http://localhost/Content/Images/myimage 

を参照しているbcozのいずれか表示されません。ここで何か助けてください。ここで

は私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で指定したWebサイトの名前を追加するURLを変更すると、そのURLにアクセスできます。

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が来ているので、問題があります現在のURLとの相対的な値になります。したがって、http://localhost/MySite/Home/Loginに行く場合は、../../Content/myimage.pngを使用する必要があります。しかし、http://localhost/MySiteに行くと、コントローラとアクションがURLに明示的に含まれていないため、route.configのデフォルトコントローラとアクション(Home/Login)が起動し、イメージへの相対パスはContent/myimage.pngになります。http://localhost/MySite/Homeに行くと同じ問題が発生します。デフォルト動作(Login)が使用され、相対パスは../Content/myimage.pngです。

CSSファイルでスタイルを使用し、インラインスタイルを使用しないことをお勧めします。その方法では、画像のURLは常にURLが変わらないCSSファイルを基準にしています。ちょうどあなたがBundleConfig.csに束ねる使用する場合は、必ずパスが一貫MVC Bundling and CSS relative URLs

まましかし、あなたは、インラインスタイルを使用する必要がある場合、あなたは~があなたのルートであることで、常に正しいパスを取得するために@Url.Content()を使用することができますようにする必要があり注意してくださいアプリ:

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

+0

素晴らしい。ちょっと別の質問ですが、アンカータグでどうすればいいですか?私は、私がエンコーディングしているクエリ文字列パラメータを取るpdfファイルを生成しています。だから私は上記の私の編集でhtmlhelper拡張メソッドを書いています。それでも私は同じ問題を抱えています。それは相対URLをとり、実際のURLについて言及する方法はわかりません。あなたが助けることを願っています – Blossom