Привет!
Пытаюсь прикрутить к asp.net приложению ISAPI_Rewrite, чтобы урлы вида ../page.aspx/name1/value1 вели на ...page.aspx?name1=value1
Вроде работает, НО при постбэке осуществляется переход на ../page.aspx/name1/page.aspx?name1=value1
Кто-нибудь сталкивался с подобными явлениями?
Здравствуйте, -ksu-, Вы писали:
K>Пытаюсь прикрутить к asp.net приложению ISAPI_Rewrite, чтобы урлы вида ../page.aspx/name1/value1 вели на ...page.aspx?name1=value1 K>Вроде работает, НО при постбэке осуществляется переход на ../page.aspx/name1/page.aspx?name1=value1 K>Кто-нибудь сталкивался с подобными явлениями?
Нужно смотреть метод HttpContext.RewritePath. Или реализовать Rewrite функциональность самостоятельно...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, -ksu-, Вы писали:
K>Привет! K>Пытаюсь прикрутить к asp.net приложению ISAPI_Rewrite, чтобы урлы вида ../page.aspx/name1/value1 вели на ...page.aspx?name1=value1 K>Вроде работает, НО при постбэке осуществляется переход на ../page.aspx/name1/page.aspx?name1=value1 K>Кто-нибудь сталкивался с подобными явлениями?
Сталкивался. В .Net Framework 1.1 эта проблема не излечима, без написания своего контрола, которые будет реализовывать <form runat="server"... — так что лучше даже не тратить на это время, и жить так как есть.
Здравствуйте, -ksu-, Вы писали:
K>Привет! K>Пытаюсь прикрутить к asp.net приложению ISAPI_Rewrite, чтобы урлы вида ../page.aspx/name1/value1 вели на ...page.aspx?name1=value1 K>Вроде работает, НО при постбэке осуществляется переход на ../page.aspx/name1/page.aspx?name1=value1 K>Кто-нибудь сталкивался с подобными явлениями?
Здравствуйте, TK, Вы писали:
TK>Здравствуйте, ZORK, Вы писали:
ZOR>>Сталкивался. В .Net Framework 1.1 эта проблема не излечима
TK>Я бы не был так категоричен...
Приходится. Я пропахал Anakrino'й их код, и нашел, что адрес, который пишется в form из <form runat="server... формируется из местоположения страницы или user control'а в который эта форма входит. При этом возможнсти для того чтобы его подменить на свой, или както повлять на процесс формирования я не нашел ...и потратил на это, я довольно ощутимое время — день или два.
Полагаю, что это недоработка, которая будет устранена в будущих версия .Net.
Здравствуйте, ZORK, Вы писали:
ZOR>>>Сталкивался. В .Net Framework 1.1 эта проблема не излечима
TK>>Я бы не был так категоричен...
ZOR> Приходится. Я пропахал Anakrino'й их код, и нашел, что адрес, который пишется в form из <form runat="server... формируется из местоположения страницы или user control'а в который эта форма входит. При этом возможнсти для того чтобы его подменить на свой, или както повлять на процесс формирования я не нашел ...и потратил на это, я довольно ощутимое время — день или два.
Можно просто сделать свою реализацию IHttpHandlerFactory — тогда вообще никак мудрить с url не нужно. Собственно в статье, что привел ВВ все достаточно подробно расписано...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, TK, Вы писали:
TK>Можно просто сделать свою реализацию IHttpHandlerFactory — тогда вообще никак мудрить с url не нужно. Собственно в статье, что привел ВВ все достаточно подробно расписано...
Согласен, но хочу обратить внимание на раздел этой статьи — Handling Postbacks, где, собственно, и написано то о чем я говорил. То есть, для того чтобы postback начал работать как надо, не достаточно просто переопредеить IHttpHandler или использовать UrlRewrite, а надо еще модернизировать генерацию тэга <form ...
Здравствуйте, ZORK, Вы писали:
ZOR>Здравствуйте, TK, Вы писали:
TK>>Можно просто сделать свою реализацию IHttpHandlerFactory — тогда вообще никак мудрить с url не нужно. Собственно в статье, что привел ВВ все достаточно подробно расписано...
ZOR>Согласен, но хочу обратить внимание на раздел этой статьи — Handling Postbacks, где, собственно, и написано то о чем я говорил. То есть, для того чтобы postback начал работать как надо, не достаточно просто переопредеить IHttpHandler или использовать UrlRewrite, а надо еще модернизировать генерацию тэга <form ...
Ключевое слово не IHttpHandler, а IHttpHandlerFactory — в данном случае страница даже не подозревает о том, где физически находится *.aspx файл.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте, ZORK, Вы писали:
ZOR> Приходится. Я пропахал Anakrino'й их код, и нашел, что адрес, который пишется в form из <form runat="server... формируется из местоположения страницы или user control'а в который эта форма входит. При этом возможнсти для того чтобы его подменить на свой, или както повлять на процесс формирования я не нашел ...
Можно так сделать в обработчике событи PreRender страницы:
Context.ReqritePath(Request.RawUrl)
Тогда в форме будет тот же адрес, что и в адресной строке броузера, и все будет работать.
Здравствуйте, -ksu-, Вы писали:
K>Привет! K>Пытаюсь прикрутить к asp.net приложению ISAPI_Rewrite, чтобы урлы вида ../page.aspx/name1/value1 вели на ...page.aspx?name1=value1 K>Вроде работает, НО при постбэке осуществляется переход на ../page.aspx/name1/page.aspx?name1=value1 K>Кто-нибудь сталкивался с подобными явлениями?
В приведенном конкретном случае вообще не нужен никакой rewrite, если url страницы "page.aspx/name1/value1", то Request.PathInfo содержит в себе значение "/name1/value1".
Здравствуйте, shapkin, Вы писали:
S>Можно так сделать в обработчике событи PreRender страницы: S>Context.ReqritePath(Request.RawUrl)
S>Тогда в форме будет тот же адрес, что и в адресной строке броузера, и все будет работать.
Рекомендую попробовать на каком-нить сложно случае. Если б все так было просто, народ бы про это в стати не писал бы
Здравствуйте, ZORK, Вы писали:
ZOR>Здравствуйте, shapkin, Вы писали:
S>>Можно так сделать в обработчике событи PreRender страницы: S>>Context.ReqritePath(Request.RawUrl)
S>>Тогда в форме будет тот же адрес, что и в адресной строке броузера, и все будет работать.
ZOR> Рекомендую попробовать на каком-нить сложно случае. Если б все так было просто, народ бы про это в стати не писал бы
ZOR>-zork
Здравствуйте, shapkin, Вы писали:
S>Можно пример "сложного случая"?
Делаем путь http:\\[srv]\[app]\page, при обращении к app в Global.asax используя UrlRewrite перенаправляем на default.aspx, в котором есть <form runat="server"..., и смотрим что получилось в action аттрибуте формы в HTML странице, при обращении по адресу page. Конечно, так себе сложный случай, но там будет default.aspx, а не page, как хотелось бы.
Здравствуйте, ZORK, Вы писали:
ZOR>Здравствуйте, shapkin, Вы писали:
S>>Можно пример "сложного случая"?
ZOR>Делаем путь http:\\[srv]\[app]\page, при обращении к app в Global.asax используя UrlRewrite перенаправляем на default.aspx, в котором есть <form runat="server"..., и смотрим что получилось в action аттрибуте формы в HTML странице, при обращении по адресу page. Конечно, так себе сложный случай, но там будет default.aspx, а не page, как хотелось бы.
ZOR>-zork