none
关于Ajax的__doPostBack无效的问题····求教!····· RRS feed

  • 问题

  • <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript">
            function xk() {
                __doPostBack("d1", "");
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <input id="Button4" type="button" value="button111111" onclick="xk()" />
           
            <asp:Button ID="Button1" runat="server"  Text="Button1"  OnClientClick="xk()"/>

            <asp:Button ID="d1" runat="server" Text="Button3"
                onclick="Button3_Click" />
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </div>
        </form>
    </body>
    </html>


    d1的点击事件是给TextBox1随便赋个值,

    但是我运行的时候,点的两个点击事件为xk()的按钮都出现网页错误。

    行: 11
    错误: 缺少对象

    启动Jscript调试,显示在__doPostBack("d1", "");这里有问题

    __doPostBack应该是属于C#的Ajax的吧。希望没离题

    求教,谢谢。

    • 已移动 肖小勇Moderator 2009年11月30日 1:16 ASP.NET 相关问题 (发件人:.NET Framework 一般性问题讨论区)
    2009年11月30日 0:52

答案

  • 你好。
    __doPostBack 你为一些控件添加了服务端事件后都会后成它,大部分的页面 PostBack 都是由它触发的。__doPostBack asp.net 1.1 时就有了。

    比如你在页面中放入以下代码,在生成界面后会自动生成 __doPostBack 

    <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"  ontextchanged="TextBox1_TextChanged"></asp:TextBox>



    知识改变命运,奋斗成就人生!
    • 已标记为答案 天驰 2009年11月30日 2:22
    2009年11月30日 1:15
    版主
  • 如果你不想加LinkButton,你可以把有LinkButton的页面中的__dopostback方法拷贝到你现在的页面,稍微改变就可以了。
        <script type="text/javascript">
    //<![CDATA[
    var theForm = document.forms['form1'];
    if (!theForm) {
        theForm = document.form1;
    }
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTVALIDATION.value = eventTarget;
            theForm.__EVENTVALIDATION.value = eventArgument;
            theForm.submit();
        }
    }
    //]]>
    </script>

    Microsoft Online Community Support
    • 已标记为答案 天驰 2009年12月1日 2:38
    2009年12月1日 1:47

全部回复

  • 你好。
    __doPostBack 你为一些控件添加了服务端事件后都会后成它,大部分的页面 PostBack 都是由它触发的。__doPostBack asp.net 1.1 时就有了。

    比如你在页面中放入以下代码,在生成界面后会自动生成 __doPostBack 

    <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"  ontextchanged="TextBox1_TextChanged"></asp:TextBox>



    知识改变命运,奋斗成就人生!
    • 已标记为答案 天驰 2009年11月30日 2:22
    2009年11月30日 1:15
    版主
  • 正如X.X.Y版主所言,

    该方法1.1的时候就有的,你上面的例子之所以不成功是因为服务器端没有为客户端的任意控件生成
    __doPostBack这个方法,所以客户端就没有这个方法。

    你可以拉入一个LinkButton到你的页面,它就会自动生成该方法,你就可以调用了。

    Microsoft Online Community Support
    2009年11月30日 1:47
  • 有个页面也是这样的,

    我以为Button的点击事件也能这样写。

    搞错了,谢谢了···
    2009年11月30日 2:23
  • 请问,那么是否一定要加LinkButton如果不加的话,应该怎么实现呢?能够实现吗?

    2009年11月30日 16:45
  • 如果你不想加LinkButton,你可以把有LinkButton的页面中的__dopostback方法拷贝到你现在的页面,稍微改变就可以了。
        <script type="text/javascript">
    //<![CDATA[
    var theForm = document.forms['form1'];
    if (!theForm) {
        theForm = document.form1;
    }
    function __doPostBack(eventTarget, eventArgument) {
        if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
            theForm.__EVENTVALIDATION.value = eventTarget;
            theForm.__EVENTVALIDATION.value = eventArgument;
            theForm.submit();
        }
    }
    //]]>
    </script>

    Microsoft Online Community Support
    • 已标记为答案 天驰 2009年12月1日 2:38
    2009年12月1日 1:47
  • 谢谢,这个已经明白了


    关于__doPostBack出现拒绝访问的问题的问题····求教!·····

    帮忙看下这个问题。

    2009年12月1日 2:38
  • 你忘记了 放ScriptManager
    2010年1月14日 9:11