11

マイナーな問題ですが、それでも私は気が狂います。

<script>次のような ASP.NET ページでレンダリングされるタグ インクルードの URL を作成しています。

<script src='<%= string.Format("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}", A, B, C)%>' type='text/javascript'></script>

問題は、これがレンダリングされるときに、&文字が次のように置き換えられること&amp;です。

<script src='http://example.com/page.aspx?a=xxx&amp;b=zzz&amp;c=123.45' type='text/javascript'></script>

私は明らかにこれを期待していました:

<script src='http://example.com/page.aspx?a=xxx&b=zzz&c=123.45' type='text/javascript'></script>

ただし、<script>タグの外側で URL を直接レンダリングすると、問題ないように見えます。やってるだけ

<%= string.Format("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}", A, B, C) %>

これをレンダリングします:

http://example.com/page.aspx?a=xxx&b=zzz&c=123.45

何を与える?そして、どうすればこの狂気を止めることができますか? 私のOCDはそれを取ることができません!

4

6 に答える 6

7

<script>@Falkonと@AVDが言っているように、ASP.NETはタグ内で「正しい」ことを自動的に実行しています。w3c勧告-C.12を参照してください。属性値(およびその他の場所)でのアンパサンドの使用

ドキュメントが過去のHTMLユーザーエージェントおよびXMLベースのユーザーエージェントと互換性があることを保証するために、リテラル文字として扱われるドキュメントで使用されるアンパサンドは、エンティティ参照として表現される必要があります(例: " &amp;")。

ASP.NETがページの残りの部分で同じことを行わない理由は完全にはわかりませんが(理由はいくつもあります)、少なくともスクリプトタグのアンパサンドを修正しています。結論:URLを「スクランブリング」するためにASP.NETを罵倒しているかもしれませんが、代わりにWebページが標準に準拠するのを助けてくれたことに感謝したいと思うかもしれません。

于 2013-01-05T04:09:20.053 に答える
2

多分MvcHtmlString.Create()またはHtml.Raw()

<script src='<%= MvcHtmlString.Create("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}", A, B, C)%>' type='text/javascript'></script>

また

<script src='<%= Html.Raw("http://example.com/page.aspx?a={0}&b={1}&c={2:0.00}", A, B, C)%>' type='text/javascript'></script>
于 2013-01-05T04:07:30.490 に答える
1

私はそれを解決することができます。メソッドを作成するだけです:

    public void BuildUrl(String baseUrl = "", String data = "")
    {
        Response.Write(baseUrl + data);
    }

次のように私のhtmlページで使用します。

<button type="button" class="btn_new" ref="<% this.BuildUrl(this.BaseUrl + "Master/Tanker_Edit.aspx?", "type=new&unique_id=" + Session.SessionID); %>">New</button>

結果:

<button type="button" class="btn_new" ref="http://kideco.local/Master/Tanker_Edit.aspx? type=new&unique_id=emxw1pkpnwcxpn1cl2cf04zv">
于 2013-08-06T07:34:00.470 に答える
0

<%=応答ストリームに書き込む内容を自動的に HTML エンコードできるの代わりに、 を使用してみてください<$:。これは、ASP.Net 4.0 で追加された新しい (らしい) コード式ナゲット構文です。この新しい構文は、デフォルトでほとんどのものを HTMLEncode しますが、このデータを HTMLEncode したくないIHtmlStringことをこの新しいナゲットに明示的に伝えるために使用できる特別なインターフェイスがあり、二重のエンコードを回避します。ほとんど常に新しいものを使用し、古いものはほとんど使用しないでください。ただし、もちろんこれには例外があります。<%:<%=

詳細については、こちらをご覧ください。

http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and-asp-net- mvc-2.aspx

于 2013-01-05T04:13:14.127 に答える
0

"&" は、HTML および XML の予約文字であり、したがって ASP.NET でも予約されています。"&" は、ASP.NET によって&amp;に変換されます。それはその文字をウェブ上に表示するためのコードだからです。

この質問の回答で答えが見つかるかもしれません: ASP.Net URLEncode Ampersand for use in Query String

お役に立てば幸いです、頑張ってください!

于 2012-12-06T06:13:44.037 に答える
0

コメント使用についてServer.HtmlEncode( yourString )

二重引用符や一重引用符、アンパサンド (&)、小なり記号、大なり記号などを自動的にエスケープします。

于 2012-12-06T06:15:59.650 に答える