__doPostBack未定义

时间:2013-08-23 18:50:59

标签: c# javascript asp.net

我已使用字符串构建器动态编写脚本,如下所示

public static void ShowMessage1(ENUM_MessageType pMessageType, string pMessage, Button c)
    {
StringBuilder strScript = new StringBuilder();
        strScript.Append("<script type=\"text/javascript\" src=\"").Append("/Scripts/jquery-1.4.1.js").Append("\"></script>");
        strScript.Append("<script type=\"text/javascript\" src=\"").Append("/Scripts/jquery.msgBox.js").Append("\"></script>");
        strScript.Append("<link rel=\"stylesheet\" type=\"text/css\" href=\"").Append("/Styles/msgBoxLight.css").Append("\" />");
        strScript.Append("<script type=\"text/javascript\">");
        strScript.Append("(function example()");
        strScript.Append("{");
        strScript.Append("$.msgBox({");
        strScript.Append("title:'" + lMessageType + "'");
        strScript.Append(",");
        strScript.Append("content:'" + pMessage + "'");
        strScript.Append(",");
        strScript.Append("type:'" + lOptionType + "'");
        strScript.Append(",");
        strScript.Append("buttons: [{ value: 'Yes' }, { value: 'No'}],");
        strScript.Append("success: function (result) {");
        strScript.Append("if(result == 'Yes'){");
        strScript.Append("javascript:_doPostBack('" + c.ClientID + "','');");
        strScript.Append("}");
        strScript.Append("}");
        strScript.Append("});");
        strScript.Append("})();");
        strScript.Append("</script>");
        if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
        {
            page.ClientScript.RegisterClientScriptBlock(typeof(enumClass), "info", strScript.ToString());
        }
    }

我收到异常,因为ReferenceError: _doPostBack is not defined可以帮助我

3 个答案:

答案 0 :(得分:1)

目前你应该javascript

strScript.Append("avascript:_doPostBack('" + c.ClientID + "','');");

应该是:

strScript.Append("javascript:__doPostBack('" + c.ClientID + "','');");

前面缺少j。还要确保其__不是单个下划线。

答案 1 :(得分:0)

__doPostBack()来电时似乎错过了下划线。

另外,请查看渲染的JS中的success

(function example() {
    $.msgBox({
        title : 'INFORMATION',
        content : 'I am from client side',
        type : 'confirm',
        buttons : [{
                value : 'Yes'
            }, {
                value : 'No'
            }
        ],
        success : function (result) {
            if (result == 'Yes') {
                javascript : __doPostBack('Button1', ''); // <--- this line
            }
        }
    });
})();

如果您只是想在那里调用回发,请删除javascript :,使其显示如下:

strScript.Append("__doPostBack('" + c.ClientID + "','');");

另外,根据this SO question上的答案,确保向页面呈现了一个ASP.NET WebControl。呈现WebControl时,页面会自动包含__doPostBack()。所以,如果你在页面上没有,那么__doPostBack()方法可能会丢失。

答案 2 :(得分:0)

如果页面上没有任何asp.net服务器端回发控件,则会在客户端上抛出“_doPostBack not defined”错误。要避免上述错误,您可以尝试在页面加载事件中添加以下代码行:

protected override void OnPreLoad(EventArgs e)
    {
        this.Page.ClientScript.GetPostBackEventReference(this, string.Empty);

        base.OnPreLoad(e);
    }

GetPostBackEventReference返回一个字符串,该字符串可用于客户端事件以导致回发到服务器

另一种方法是添加隐藏的asp:Button,它将注册与GetPostBackEventReference方法相同的脚本。