2013-03-26 2 views
1

TLDR: Исходящие правила не подают в UpdatePanel частичных постбэкOutbound правило не применяется в UpdatePanel


Я использую IIS 7.5 URL Rewriter для отображения пути изображения в КДС.

Вот упрощенная версия того, что происходит

<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> 

Проблемы заключается в том, что при использовании ретранслятора внутри панели Update

фактического HTML, который выдаваемый после асинхронного постбэка

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

вместо

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

Как бы я сделать updatepanel правильно разбирает вывод?

Заранее спасибо


Edit: Моя догадка на данный момент является то, что он должен сделать что-то со страницей жизненного цикла ... или, возможно, порядок, в котором называется модулем переписывают ... будет keep updated

ответ

3

Тип содержимого ответа, возвращаемый сервером при использовании UpdatePanel, является текстовым/простым, а не text/html.

Предпочитаемое условие ResponseIsHtml, которое вы указали, будет соответствовать только содержимому text/html, поэтому ответ UpdatePanel не переписывается.

При изменении входного регулярного выражения, чтобы поймать текст/равнина, то ваш контент будет переписан, как должно:

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

К сожалению, существует проблема с выполнением этого, для которого я до сих пор не нашел решение - при перезаписанном ответе заставляет диспетчер ajax UpdatePanel выкидывать ys.WebForms.PageRequestManagerParserErrorException.

Смежные вопросы