0

次のように文字列ビルダーを使用してスクリプトを動的に記述しました

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誰かが私を助けることができるので、私は例外を取得しています

4

3 に答える 3

1

javascript現在持っているはずです

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

そのはず:

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

前が欠けjています。__また、単一のアンダースコアではないことを確認してください。

于 2013-08-23T18:51:52.073 に答える
0

__doPostBack()通話にアンダースコアがないようです。

また、successレンダリングされた JS を見てください。

(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 + "','');");

また、この SO questionの回答に従って、ページにレンダリングされた ASP.NET WebControl があることを確認してください。__doPostBack()WebControl がレンダリングされるときに、ページに自動的に含まれます。そのため、ページにメソッドがない場合は、__doPostBack()メソッドが欠落している可能性があります。

于 2013-08-23T18:57:15.863 に答える
0

ページに asp.net サーバー側のポストバック コントロールがない場合、「_doPostBack が定義されていません」というエラーがクライアントでスローされます。説明されているエラーを回避するには、次のコード行をページ読み込みイベントに追加してみてください。

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

        base.OnPreLoad(e);
    }

GetPostBackEventReference は、サーバーへのポストバックを引き起こすためにクライアント イベントで使用できる文字列を返します。

もう 1 つの方法は、GetPostBackEventReference メソッドと同じスクリプトを登録する非表示の asp:Button を追加することです。

于 2013-08-24T09:44:26.863 に答える