C# 在更新面板中卸载事件

C# 在更新面板中卸载事件,c#,javascript,asp.net,user-controls,updatepanel,C#,Javascript,Asp.net,User Controls,Updatepanel,我有一个图像按钮声明为 <div> <asp:ImageButton ID="btnDoWork" runat="server" ImageUrl="/_LAYOUTS/1033/IMAGES/row.png" ValidationGroup="Page" /> </div> <div> <asp:RequiredFieldValidator runat="server" ID="reqName" ControlToValid

我有一个图像按钮声明为

<div>
    <asp:ImageButton ID="btnDoWork" runat="server" ImageUrl="/_LAYOUTS/1033/IMAGES/row.png" ValidationGroup="Page" />
</div>
<div>
    <asp:RequiredFieldValidator runat="server" ID="reqName" ControlToValidate="txtEmail" ValidationGroup="Page" ErrorMessage="enter a email" />
    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$" ControlToValidate="txtEmail" ValidationGroup="Page" ErrorMessage="enter a email" />
</div>
然后

然后在按钮点击事件中

public static void Page_Unload_Page_Unload_MessageBox(object sender, EventArgs e)
        {
            System.Globalization.CultureInfo _culture = Thread.CurrentThread.CurrentUICulture;
            StringBuilder sb = new StringBuilder();
            sb.Append("<script language=\"javascript\">");
            sb.Append("$('body').append(\"<div id='M'><span id='text'>" +
               SPUtility.GetLocalizedString("$Resources:abc", "def", (uint)_culture.LCID) +
               "</span><br/><div id='BB' onclick='return BB();'><a href='' onclick='return BB();'>" +
               SPUtility.GetLocalizedString("$Resources:OK", "def", (uint)_culture.LCID) +
               "</a></div></div>\");");
            sb.Append("function BB() { $('#M').remove(); $('#E').remove(); return false; }");
            sb.Append("function dM(){   var browser = navigator.appName; if (browser == 'Netscape') { $('#M').css({ 'top': '5%' }, 500);    } }");
            sb.Append("</script>");

            // Write the JavaScript to the end of the response stream.
            HttpContext.Current.Response.Write(sb.ToString());
publicstaticvoidpage\u Unload\u Page\u Unload\u MessageBox(objectsender,EventArgs e)
{
System.Globalization.CultureInfo\u culture=Thread.CurrentThread.CurrentUICulture;
StringBuilder sb=新的StringBuilder();
某人加上(“”);
sb.Append($('body')。Append(\“”+
SPUtility.GetLocalizedString($Resources:abc、def、(uint)\u culture.LCID)+
“
\”;”; sb.Append(“函数BB(){$('#M').remove();$('#E').remove();返回false;}”); sb.Append(“函数dM(){var browser=navigator.appName;if(browser='Netscape'){$('M').css({'top':'5%'},500);}”); 某人加上(“”); //将JavaScript写入响应流的末尾。 HttpContext.Current.Response.Write(sb.ToString());
现在,如果我输入电子邮件地址,当它尝试
响应时,我会出错。写
我想,我想知道还有什么替代方案,例如,我可以在更新面板或任何其他事件或其他东西中使用触发器

这是我现在得到的错误


注意:我更改了所有变量名,因此如果出现不匹配的情况,请不要感到困惑。

消息非常清楚,您不能在更新面板上添加此命令
HttpContext.Current.Response.Write
,因为更新面板返回javasc使用的结构重新绘制页面的某些部分

解决方案是在UpdatePanel中添加一个文本控件,该控件位于您希望添加额外html代码的位置,并将该控件编写为:

txtLiteralID.Text = sb.ToString();
然而,这里的情况与正常情况不同,您赢得了渲染和运行脚本的机会

主要问题是如何触发脚本运行。唯一的方法是使用UpdatePanel处理程序,该处理程序是以下标准代码:

<script type="text/javascript"> 
   // if you use jQuery, you can load them when dom is read.
   $(document).ready(function () {
       var prm = Sys.WebForms.PageRequestManager.getInstance();    
       prm.add_initializeRequest(InitializeRequest);
       prm.add_endRequest(EndRequest);

    });        

    function InitializeRequest(sender, args) {
    }

    function EndRequest(sender, args) {
       // after update occur on UpdatePanel run the code.
       UnloadMsgBox();
    }
</script>
并且不需要在UpdatePanel上渲染它

总结如下:

  • 在“更新”面板上,您不能使用
    Response.Write
    来呈现内容,而只能呈现一个文本控件,该控件在其内部呈现
  • 在“更新”面板上,您不能呈现javascript代码并期望运行,要运行javascript代码,您需要使用UpdatePanel附带的EndRequest处理程序

MS Ajax调用执行整页渲染,从原始页面计算差异,将差异发送到客户端,然后在浏览器中神奇地合并差异

如果您只是将javascript作为响应发送,那么这是框架所不期望的,它会抛出消息


请参阅关于如何从UpdatePanel调用javascript的说明。

谢谢,但很抱歉,我有点困惑,在我的代码中,我用sb和其中的所有javascript函数创建了一个文本控件,但您在函数UnloadMsgBox()中执行此操作再次说明:SI在ChildControl方法中创建了文字控件,然后将其添加到UpdatePanel中。它包含您在函数UnloadMsgBox中定义的所有代码,但是我还有另一个问题,可以在此处查看,cheers:)
txtLiteralID.Text = sb.ToString();
<script type="text/javascript"> 
   // if you use jQuery, you can load them when dom is read.
   $(document).ready(function () {
       var prm = Sys.WebForms.PageRequestManager.getInstance();    
       prm.add_initializeRequest(InitializeRequest);
       prm.add_endRequest(EndRequest);

    });        

    function InitializeRequest(sender, args) {
    }

    function EndRequest(sender, args) {
       // after update occur on UpdatePanel run the code.
       UnloadMsgBox();
    }
</script>
function UnloadMsgBox()
{
    // render your code of the javascript.
    $('body').append(\"<div id='M'><span id='text'></span><br/><div id='BB' onclick='return BB();'><a href='' onclick='return BB();'></a></div></div>\");

    function BB() { $('#M').remove(); $('#E').remove(); return false; }"
    function dM(){   var browser = navigator.appName; if (browser == 'Netscape') { $('#M').css({ 'top': '5%' }, 500);    } }"
}