0

私はGridView.GridViewでレンダリングしているページを持っていCheckBoxます.Jqueryダイアログが表示され、そのダイアログでポストバックイベントが必要ですcheck. uncheckそのため、そのページに手動ポストバックを追加しています。gridviewに1ページしかないまで、すべて問題ありません。gridview にレコードが追加されるとすぐに、ページに _doPostBack メソッドが追加されます。そのため、ページに 2 _doPostBack メソッドがあり、これが原因で何も機能しません。

既に手動で定義しているため、コントロールによって _doPostBack メソッドを追加したくないページで定義するにはどうすればよいですか?

ここに私のHTMLがあります

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1">
    <title>Store Management</title>
    <script src="/js/jquery-1.9.1.min.js" type="text/javascript"></script>
    <script src="/js/jquery-ui.min-1.10.1.js" type="text/javascript"></script>
    <link href="/assets/styles/StorePortal/style-22012013.css" rel="stylesheet"
    type="text/css" />
    <link href="/assets/styles/StorePortal/jquery-ui.css" rel="stylesheet"
    type="text/css" />
    <link href="../App_Themes/AbleCommerce/ComponentArt.css" rel="stylesheet"
    type="text/css" />
    <link href="../App_Themes/AbleCommerce/print.css" rel="stylesheet" type=
    "text/css" />
    <link href="../App_Themes/AbleCommerce/style.css" rel="stylesheet" type=
    "text/css" />
    <link href="../App_Themes/AbleCommerce/webparts.css" rel="stylesheet" type=
    "text/css" />
</head>

<body>
    <form action=
    "portal.aspx?q=bbaae796d951c95311f5ec3e599784079c6093ee&amp;q1=COV" id=
    "form1" method="post" name="form1">
        <div>
            <input id="__EVENTTARGET" name="__EVENTTARGET" type="hidden" value=
            "" /> <input id="__EVENTARGUMENT" name="__EVENTARGUMENT" type=
            "hidden" value="" />
        </div><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.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
        }
        }
        //]]>
        </script>

        <div>
            <input id="__VIEWSTATEENCRYPTED" name="__VIEWSTATEENCRYPTED" type=
            "hidden" value="" />
        </div>
      <script type="text/javascript"> --> this one is added by me manually
//<![CDATA[
        var theForm = document.forms['form1'];
        if (!theForm) {
            theForm = document.form1;
        }
        function __doPostBack(eventTarget, eventArgument) {
            if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
                theForm.__EVENTTARGET.value = eventTarget;
                theForm.__EVENTARGUMENT.value = eventArgument;
                theForm.submit();
            }
        }
        //]]>
        </script>

        <div>
            <input id="__EVENTTARGET" name="__EVENTTARGET" type="hidden" value=
            "" /> <input id="__EVENTARGUMENT" name="__EVENTARGUMENT" type=
            "hidden" value="" /> /// sOME CODE HERE
        </div>
     --> this one is added by me manually
    </form>
</body>
</html>

ここで、私が追加した _doPostBack を削除すると、グリッドビュー ページングが機能します。しかし、グリッドビューに1ページしかない場合、_doPostBackが見つからないため、jqueryダイアログのイベントが機能しません。

答え:

私が追加した _doPostBack() を削除し、代わりに、このメソッドを必要とする asp.net コントロールがなくても _doPostBack() を追加する Page_Load() にこれを追加しました。

ClientScript.GetPostBackEventReference(this, string.Empty);

そのリンクを指摘してくれた@Tim Schmelterに感謝します

4

1 に答える 1

1

レコードの削除を確認するダイアログをポップアップしようとすると、同様の問題が発生しました。これは私が使用したコード (jQuery UI ダイアログ) であり、完全に機能します。新しい を追加しないでくださいdoPostBack。代わりに、この考えに従うようにしてください。要件に合わせて調整できます。

// When the user tries to delete a record, show a confirmation.
$(".confirmationButton").click(function(e) {
    // Stop the PostBack
    e.preventDefault();

    $(".confirmationDialog").dialog("open");
}); 

$(".confirmationDialog").dialog({
    buttons: {
    "No": function() {
        $(this).dialog("close");
    },
    "Yes": function() {
        $(this).dialog("close");
            // User confirmed deletion, so carry on with the PostBack.
            eval($("#ctl00_MainContentPlaceHolder_hdnBtnPostBack").val());
        }
    }
});

コードのどこかに (ページのソースを確認するとき)、次のようなものがあります。

<input id="ctl00_MainContentPlaceHolder_hdnBtnPostBack" type="hidden" value="__doPostBack('ctl00$MainContentPlaceHolder$btnDelete','')" name="ctl00$MainContentPlaceHolder$hdnBtnPostBack">

これが で使用するオブジェクトですeval()

于 2013-07-23T10:18:12.780 に答える