User control with server tag FORM and custom function __doPostBack(...)
Вопрос:
Можно ли заставить ASP.NET не генерить клиентский скрипт с
function __doPostBack(eventTarget, eventArgument)?
Предыстория:
Увидел неплохую статью на
http://www.gotdotnet.ru
"Использование Web User Controls для построения шаблонов страниц в ASP.Net"
здесь
автор Иванов Роман Сергеевич
Если вкратце, то суть идеи сводится к созданию DefaultTemplate.ascx контрола
в котором помещается тег <form runat="server"> ... </form>
и несколько PlaceHolder controls (для последующей загрузки в них других
User Controls — this.TopPlaceHolder.Controls.Add(Page.LoadControl(this.topModuleUrl))
например:
<form runat="server">
...
<asp:PlaceHolder Runat="server" ID="TopPlaceHolder"></asp:PlaceHolder>
...
<asp:PlaceHolder Runat="server" ID="LeftPlaceHolder"></asp:PlaceHolder>
...
<asp:PlaceHolder Runat="server" ID="RightPlaceHolder"></asp:PlaceHolder>
...
</form>
Дальше помещаем этот DefaultTemplate.ascx контрол на любую .aspx страницу
например так:
<%@ Page language="c#" AutoEventWireup="false" %>
<%@ OutputCache Duration="600" VaryByParam="*"%>
<%@ Register TagPrefix="template" TagName="DefTemplate" Src="Templates/DefaultTemplate.ascx"%>
<template:DefTemplate runat="server"
RightModuleUrl="~/Templates/RightModule.ascx"
TopModuleUrl="~/Templates/DefaultMenu.ascx">
</template:DefTemplate>
И ... видим следующую неприятность:
если загрузить в один из PlaceHolder'ов контрол который подразумевает PostBack
(Например DataGrid with AllowSort="true") то на клиентской странице мы увидим
следующее:
<form
name="_ctl0:_ctl0" method="post" action="App1.aspx"
id="_ctl0__ctl0">
...
<script language="javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
theform = document.forms["_ctl0:_ctl0"];
}
else {
theform = document._ctl0:_ctl0;
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
...
</form>
Естественно что во время выполнения строки
theform = document._ctl0:_ctl0;
(обращение к форме идет по ее имени) происходит ошибка.
А имя такое из за того что UserControl является контейнером для HTMLForm
Если самому сгенерить клиентский скрипт где эта строка примет вид
theform = document._ctl0__ctl0; (обращение к форме идет по ее ID) то все
работает но в строке состояния IE висит сообщение об ошибке
Можно ли заставить ASP.NET не генирить клиентский скрипт с
function __doPostBack(eventTarget, eventArgument)?
Здравствуйте, SunComp, Вы писали:
известная проблема, нужне не заставлять его не генерить скрипт, а заставить изменить. например при помощи ResponseFilter
вот тут есть фикс
здесь
правда он не отрабатывает при Server.Transfer, это тоже бага, читать:
Re[3]: Response.Filter и Server.RransferАвтор: Demoniada
Дата: 15.12.03
и...используйте поиск.
... << RSDN@Home 1.1 beta 2 >>
Здравствуйте, mogadanez, Вы писали:
M>известная проблема, нужне не заставлять его не генерить скрипт, а заставить изменить. например при помощи ResponseFilter
M>вот тут есть фикс здесь
...
Большое спасибо!
Фикс скачал пошел смотреть....
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, SunComp, Вы писали:
M>известная проблема, нужне не заставлять его не генерить скрипт, а заставить изменить. например при помощи ResponseFilter
M>вот тут есть фикс здесь
А нельзя ли разджевать, как его использовать. А то я совсем нгедавно из танка вылез
Здравствуйте, mogadanez, Вы писали:
M>Здравствуйте, SunComp, Вы писали:
M>известная проблема, нужне не заставлять его не генерить скрипт, а заставить изменить. например при помощи ResponseFilter
M>вот тут есть фикс здесь
M>правда он не отрабатывает при Server.Transfer, это тоже бага, читать: Re[3]: Response.Filter и Server.RransferАвтор: Demoniada
Дата: 15.12.03
M>и...используйте поиск.
А как заставить этот фикс работать?
Выполняю инструкцию в которой сказано списать бинарник bin сайта и внести апдейт в Web.config.
Результата нет. Форма в названии имеет двоеточие, вызов в скрипте тоже содержит двоеточие. Ничего не изменилось.
Что я делаю не так ?