2

質問の書き直し

私の人生では、VSの開発サーバーを使用してリモートIISサーバーに公開する間、ユーザーコントロール内で相対イメージパスが一貫して機能することはできません。を追加して画像をサーバータグにしたくありませんrunat="server"。私はそれが厳密にクライアントであることを望んでおり、ホーカスポーカスコードハックを使用したくありません. 切断を解決したいので、ここに私の問題があります:

私の画像は に保存されてい~/imagesます。私のユーザーコントロールはに保存されてい~/usercontrols/anothersubfolderます。

これをすると…

<img id="myimage" src="../../Images/help.png" alt="" />

...VS 開発サーバー (localhost) を使用するとイメージが読み込まれますが、リモート IIS 仮想ディレクトリに展開すると読み込まれません。しかし、これを行うと...

<img id="myimage" src="<%=Request.ApplicationPath %>/Images/help.png" alt="" />

...リモートで公開すると機能しますが、開発サーバーを使用しません!

VS 開発サーバーとリモートで公開する場合の両方で機能するソリューションが必要です。runat="server"私が言ったように、イメージタグに追加したり、コードハックを使用したりしたくありません. ここに切断があり、それを解決する方法を知りたいです。

4

7 に答える 7

4

次のようにしてみてください。

<img src="~/Images/indicator.gif" border="0" alt="" runat="server" />

ASP.NET での相対 URL および絶対 URL に関する問題の回避

Control.ResolveUrl 対 Control.ResolveClientUrl 対 VirtualPathUtility.ToAbsolute

ResolveUrl と ResolveClientUrl の比較

于 2012-08-08T14:44:44.190 に答える
1

他の人がすでに答えたように、ユーザー コントロール ".ascx" は、それを含むページによって読み込まれています。ところで、マスター ページと同じことです。それらはページによって読み込まれています。したがって、スクリプトで記述する相対パスは、ページの場所に相対的です。

したがって <img id="myimage" src="~/Images/help.png" alt="" runat="server" />、サーバー側のコントロールを画像に配置するか、単に使用すると、問題が技術的に解決されます..

しかし、私が理解していることから、おそらくあなたが知っていたように、あなたの問題はそれほど技術的ではありません..
だから、あなたの問題は、単純なhtmlコントロールを「コードハック」と表現するものにモーフィングすることに関して、より概念的であると仮定します。

asp.net の操作に関する「標準」を習得する必要があります
。そのためには、まず asp.net がサーバー側でページを生成することを目的としたシステムであることを理解し、その後、この新しく作成された動的に生成されたページを配信する必要があります。クライアント側に - これは asp.net を使用する主な利点であり、その最高のプリンシパルです!!
これが、asp.net のページが .html ではない理由です。後で生成されるスクリプトは html のみですが、.aspx です。

したがって、前の段落に同意する場合は、作成した .aspx ページは配信前にサーバーによって処理されており、そこに挿入したスクリプト タグは、それを動的に処理する方法に関する一連の指示にすぎないことも理解できます。runat="server" を追加することは、結果の html ページの生成プロセス中に、script タグの属性とコンテンツにサーバー側で特別な注意が必要であることを意味するだけです。

VS にある aspx ページと、ブラウザー用に生成された aspx ページは同じエンティティではありません。
runat="server" は、クライアント側に配信されるスクリプトには表示されません。

asp.net でスクリプトを書くことは、html を書くことではありません。生成された html に含まれるものに影響を与えることを目的としたメタ命令を書くことです。

ここまでで、提供された最高の技術的ソリューションを asp.net の通常の自然な標準として、悲しみや後悔なしに使用するように説得できたことを願っています。

于 2013-08-12T11:27:35.830 に答える
1

あなた自身の答えを見つけたようです: ascx コントロールの場所は相対パスを変更しません。ascx コントロールをロードする aspx ページは、最終的にパスを決定します (これは、CSS および JS ファイルを使用している場合に拡張されます)。

相対パスを使用しないことで、この問題を「解決」しました。私のsrc属性は常に のように見えます<img src="/<appfolder>/Images/<filename>.<extension> />

Web サイトのプロパティを変更し、プロパティ ページの [Web] タブで[ Use Local IIS Web Server]を選択したことに注意してください。私は Visual Studio Development Server を使用していないため、マイレージはプロジェクトの構成によって異なる場合があります。

于 2012-08-08T20:21:00.597 に答える
0

もう 1 つの可能性として、IIS で ASP 親パスがデフォルトで無効になっていますが、これが問題の原因でしょうか?

この記事では、この問題を解決する方法について説明します。基本的に、いくつかの方法で解決できますが、最も簡単な方法は、IIS サイトの ASP 設定に移動して、親パスを再度有効にすることです。

于 2013-08-16T07:11:39.027 に答える
0

ローカルで実行すると、作成したフォルダーを使用して作業しています。公開後、コントロールが VS によって作成されたコントロール フォルダーに格納され、2 つのフォルダーを含む元のファイル構造が失われます。公開後にファイルシステムを確認し、作業フォルダーを並べ替えます。

于 2012-08-08T14:45:05.097 に答える
0

ユーザー コントロールの相対パスは、ユーザー コントロールの場所ではなく、それらが表示されるページに対して相対的です。これは基本的に、アップデートで述べていることだと思います。

更新を回答として投稿して受け入れるか、私の回答を受け入れる必要があります。

于 2012-08-08T15:57:32.010 に答える