2011-02-05 6 views
0

Visual Studio MVC2プロジェクトをローカルIISサーバーでデバッグするように変更しましたが、URLの解決方法に問題がありました。MVC2 IIS - 展開時に外部スタイルシートとスクリプトのURLを適切に解決しますか?

<%= ResolveUrl("~/Controller/Action")%> 

ビューのときのjavascript生活罰金です:

の代わりにハードコーディングAJAXリクエスト言うのリンクは、私は今、そうのようなResolveUrl()メソッドを使用する必要があります。しかし、私は内部のResolveUrl()関数を使用することができない外部の.jsファイルにjavascriptを持っています。

この問題は、外部スタイルシート内の画像へのリンクにも影響します。

Visual Studio WebサーバーからローカルIIS Webサーバー、実際に展開されたWebサーバーに移動するたびに、これらのリンクを手動で変更する必要はありません。

これを回避する最善の方法は何ですか?

これまでのところ私は考えることができるすべては、あなたが隠しテキストフィールドとあなたを持っている../Content/Images/image.gif

答えて

2

ここでは、私があなたに与えることができるヒントをいくつか紹介します。まずハードコーディングを行い、ルートを利用していないため、コントローラのアクションを解決するためには、ResolveUrlを使用しないでください。明日あなたがglobal.asaxであなたのルート定義を変更することにしたら?あなたはCSSファイル内の画像パスを定義する必要があるときに今、あなたは彼らがの場所への相対的な可能性があることを知っている必要があり

<%= Url.Content("~/scripts/foo.js") %> 

<%= Url.Action("Action", "Controller") %> 

と静的リソースのための:あなたは、このようなURLヘルパーを使用する必要がありますCSSファイル。だから、例えば、あなたがこのようなあなたのCSS含まれている場合:foo.css内部

<link href="<%= Url.Content("~/styles/foo.css") %>" rel="stylesheet" type="text/css" /> 

を、あなたは相対的なイメージのパスを使用することができます。

.foo { 
    /** you can safely define relative image paths in relation with the CSS **/ 
    background-image: url(../images/foo.png); 
} 

と最後の部分では、JavaScriptファイルです。それらの中には、ヘルパーを使ってURLを定義することはできません。異なる技術が存在します。個人的には、私は必要なURLがすでにHTMLに入っていることを意味する漸進的な拡張を伴う控えめなjavascriptが好きです。たとえば、リンクやフォームをAJAX化してみてください。あなたのビュー内には、必要があります:

<%= Html.ActionLink("foo bar", "foo") %> 

と我々はそれをAJAXifyことができ、別のjavascriptの内側:

$('a').click(function() { 
    $('result').load(this.href); 
    return false; 
}); 

あなたがDOMにURLを持たないどこかのケースがありますが。

<script type="text/javascript"> 
    var myurl = '<%= Url.Action("foo") %>'; 
</script> 

をして、外部のJavaScript内でこのmyurlグローバル変数を使用します。だから、ビュー内のグローバル変数を使用することができます。

+0

グローバル変数を持つ.. .AH !!!それは人を吸っているだけです。いろいろな場面を持つさまざまな方法について言及していれば、私はおそらく否定投票になります。 – Baz1nga

+0

私はここで示唆しているように、グローバルjavascript変数をやり終えました、私はそれらを私のsite.masterヘッドエリアに入れました。 Url.Content()と他のアドバイスに関するヒントをお寄せいただきありがとうございます。 – Sgraffite

1

は、だから私は示唆しているものをあなたのC#のファイルにあるような相対パスを使用していますそこに絶対URLパスを書き、テキストファイルから読み込んだ後に外部jsファイルにパスを追加します。

しかし、私は実際には、jsファイルから別のjsファイルを読み込むことができませんでした。すべてのファイルを一度にロードするだけで、条件付きでyoiur jsファイル内に格納されます。私はあなたがjsファイルをロードする際に何らかのアクションを実行したいので、jsファイル自体から他のjsファイルをロードしていると仮定しています。最初のファイルのwindow.loadにある次のファイルの関数を呼び出すだけで、同じことを達成することができます。それはあなたの究極の目的は何ですか?

私が何を得ているのか分かりません。あなたのCSSやJSに関する

<input type="hidden" id="hidden-getmenu-locator" value=<%=Url.Action("GetMenu","Food") %> /> 

をして:

は、次のように、あなたのaspxページに設定した値とのhiddenフィールドを持つことになりますが、コントローラの食品やアクションGetMenuを行うためのポストバックをしなければならないと言います

<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-ui-1.8.custom.min.js")%>"></script> 

または、再度非表示フィールドに格納して使用することができます。

希望すること

+2

私はあなたが何を得ているのか正確にはわかりません。私は必要に応じてページにロードされている外部.jsファイルにjavascriptオブジェクトを持っています。その中にはajaxを使用してサーバーにポストバックするものもあります。これはハードコードされたURLの問題です。私の外部CSSと同様の状況。私はCSSのスプライトを使用し、バックグラウンドイメージのURLも同様にハードコードされています。 – Sgraffite

+0

あなたは現在あなたが得ているものを見ていますが、それは関係があるとは思わない。たぶん私は十分に私の質問を説明していない:(私は外部の.cssと.jsファイルをインポートする際に問題はありません。問題は、それらのファイルの中に私は何かを使用することができないハードコードされたパスがあります外部の.cssファイルと.jsファイルの内部でこれらの関数を使用する方法がない限り、ResolveURL()、Url.Action()を使用していますか?私はasp.netがそれらを静的コンテンツとして扱っていると信じています。 – Sgraffite

+0

コメントスペースからのRan。私の外部JavaScriptが正しいパスを取得できるように、私のsite.masterに隠された入力を持つ必要はありません。 – Sgraffite

関連する問題