在asp:Button的响应函数里调用了ClientScript.RegisterStartupScript(),但页面会刷新,导致页面上
通过javascript绘制的整个区域重新绘制并加载数据,速度非常慢想知道如何才能通过RegisterStartupScript()执行前台脚本,而不导致整个前台绘制区域重新绘制。用.net自带的ajax能否实现呢?要怎么做?谢谢了!!!!

解决方案 »

  1.   

    我把asp:Button放在Updatepanel里,可是貌似前台脚本也跟着不执行了
      

  2.   

    ScriptManager.RegisterClientScriptBlock(this.Page,this.GetType(),"test ","这里就是所要调用的js函数名 ", true);   
      

  3.   


    前台脚本ID用<%=控件ID.ClentID%>
      

  4.   


    后台用。。ScriptManager.RegisterClientScriptBlock
      

  5.   

    1:拖个updatepanel
    2:可以继承ICallbackEventHandler接口,实现该接口方法
    3:js|jq ajax
      

  6.   


    嗯,我试了这种方法,后台代码如下:
    protected void CreatePostBackScriptBlocks()
    {
        string cbReference = "<script>function OnSthCreated(){" + ClientScript.GetPostBackEventReference(this, "STH") + ";}</script>";
        ClientScript.RegisterClientScriptBlock(this.GetType(), "STH", cbReference, false);
            }
    前台通过HTML按钮来执行脚本:    <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <div>
                    <input id="btnSthPostBack" type="button" value="STH" onclick="javascript:OnSthCreated();" />
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    竟然整个页面都刷新了
      

  7.   


    问题是,我如果用IPostBackEventHandler的话,竟然无视UpdatePanel,整个页面都给刷新了!而如果用ICallbackEventHandler,则没有把前台asp:HiddenField的值回传,导致在后台响应事件是获取不到。
    而事件响应方法void RaiseCallbackEvent(string eventArgument)本身也只有一个参数可用,这个参数一般用以判断是谁发的。另外脚本函数CallServer(arg, context)其中有一个context,不知道能否在后台获取得到值?
      

  8.   

    你的代码帖上来看看
    下面的已测试
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <script type="text/javascript">
            function postServer(){
                document.getElementById("HiddenField1").value="csdn";
                var hid = document.getElementById("HiddenField1").value;
                <%=ClientScript.GetCallbackEventReference(this, "hid", "acceptServer", null) %>
            }
            function acceptServer(arg){
                alert(arg);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:HiddenField ID="HiddenField1" runat="server" />
            <input id="Button1" onclick="postServer()" type="button" value="回传" />
        </div>
        </form>
    </body>
    </html>public partial class Callback2 : System.Web.UI.Page, ICallbackEventHandler
    {
        protected void Page_Load(object sender, EventArgs e)
        {    }    public string arg;
        public string GetCallbackResult()
        {
            return arg;
        }    public void RaiseCallbackEvent(string eventArgument)
        {
            arg = eventArgument + ":huangwenquan123";
        }
    }
      

  9.   


    你在后台仍然是获取不到 HiddenField1.Value 的值,只是通过参数eventArgument传,
    而这个参数我可能另有用途
      

  10.   


    我现在的做法是通过服务器端按钮,先后执行客户端脚本和服务器端响应函数。
    将按钮放入UpdatePanel里面。
      

  11.   

    没有分发帖 急待解决 插个话题  高手帮解决一下<img src=... 这样的调用方式的计数器,如何才能实现来路获取功能?
    script 这种调用方式的计数器,实现来路获取,是很容易的,可以用一句js来实现,但<img这样的调用方式,js不能运行,只能直接是输入图像的代码。
    这时用Request.ServerVariables("HTTP_REFERER")取到的,只是计数器所在的网页的网址,如何才能获取到计数器所在的网页的来源地址呢?问题补充: 比如在看 http://www.ddd.com/ 时转到了看 http://www.abc.com/index.html 页,这页里用 <img src="xxx.asp" /> 引用了计数器,那么在xxx.asp中的HTTP_REFERER就是 http://www.abc.com/index.html,这并不是期望的 http://www.ddd.com,要的就是得到 http://www.ddd.com.
      

  12.   

    不清楚你要实现什么,你的隐藏控件的值是在js中赋值的?
    下面这样可以取到隐藏控件的值<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <script type="text/javascript">
            function postServer(){
                //document.getElementById("HiddenField1").value="csdn";
                //var hid = document.getElementById("HiddenField1").value;
                var hid="csdn";
                <%=ClientScript.GetCallbackEventReference(this, "hid", "acceptServer", null) %>
            }
            function acceptServer(arg){
                alert(arg);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:HiddenField ID="HiddenField1" runat="server" />
            <input id="Button1" onclick="postServer()" type="button" value="回传" />
        </div>
        </form>
    </body>
    </html>public partial class Callback2 : System.Web.UI.Page, ICallbackEventHandler
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            HiddenField1.Value = "床上等你";
        }    public string arg;
        public string GetCallbackResult()
        {
            return arg;
        }
        public void RaiseCallbackEvent(string eventArgument)
        {
            string str = HiddenField1.Value;
            arg = eventArgument + ":huangwenquan123" + str;
        }
    }
      

  13.   

    因为继承ICallbackEventHandler是没有执行render事件,隐藏控件如果后来赋值的会取不到!
      

  14.   

    <script>alert('bushib')</script>