1

TLDR: updatepanel の部分的なポストバック内でアウトバウンド ルールが適用されない


IIS 7.5 URL Rewriter を使用して、イメージ パスを cdn にマップしています。

これが何が起こっているかの簡略化されたバージョンです

<Repeater Goes Here>

    <img alt="alt text" src="<%#getImageSource(Eval("Filename").ToString() )%>">

<End of Repeater>

関数 getImageSource が返すとしましょう"/images/someimage.jpg"

これは次のように書き換えられます

<img alt="alt text" src="http://img.cdn.com/someimage.jpg">

これを機能させる送信ルールは次のとおりです。

    <rule name="Out_Rewrite_ServeCookieLessImages" preCondition="ResponseIsHtml" enabled="true">
      <match filterByTags="Img" pattern="^/Images/(.*)$"/>
      <action type="Rewrite" value="http://img.cdn.com/{R:1}"/>
    </rule>

    <preConditions>
      <preCondition name="ResponseIsHtml">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html"/>
        <add input="{URL}" pattern="\.axd.*$" negate="true"/>
      </preCondition>
    </preConditions>

問題は、更新パネル内でリピーターを使用する場合です。

非同期ポストバックの後に出力される実際の html は

<img alt="alt text" src="/Images/someimage.jpg">

それ以外の

<img alt="alt text" src="http://img.cdn.com/someimage.jpg">

updatepanel で出力を正しく解析するにはどうすればよいですか?

前もって感謝します


編集:この時点での私の推測では、ページのライフサイクルで何かをしなければならない...またはおそらく書き換えモジュールが呼び出される順序が...更新され続ける

4

1 に答える 1

3

UpdatePanel の使用時にサーバーから返される応答のコンテンツ タイプは、text/html ではなく text/plain です。

リストした ResponseIsHtml 前提条件は text/html コンテンツにのみ一致するため、UpdatePanel 応答は書き換えられません。

text/plain をキャッチするように入力正規表現を変更すると、コンテンツは次のように書き換えられます。

<preConditions>
  <preCondition name="ResponseIsHtml">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/[html|plain]"/>
    <add input="{URL}" pattern="\.axd.*$" negate="true"/>
  </preCondition>
</preConditions>

残念ながら、これを行うにはまだ解決策が見つからない問題があります。応答を書き換えると、UpdatePanel ajax マネージャーが ys.WebForms.PageRequestManagerParserErrorException をスローします。

于 2014-01-06T17:59:46.283 に答える