0

イベントが発生していないjQueryダイアログ内に asp:Button があります。OnClickプロパティを使用して別のページに移動していますが、ダイアログでアップロードするファイルの名前に従ってクエリ文字列変数を追加できるように、イベントでこのプロパティを設定PostBackUrlしたいと考えています。以前、このダイアログについて質問を投稿しました。ポストバックをまったく取得できなかったためです。しかし、それは修正されました。ボタンをクリックすると問題なくポスト バックされ、asp マークアップまたはコード ビハインドでプロパティを設定できます。しかし、何らかの理由で関数を起動できません。これが.aspxです...OnClickPostBackUrlPage_Load()OnClickPostBackUrl

<form id="frmDialog" runat="server">
        <asp:Button ID="btnDisplayDialog" runat="server" Text="Click to Display Login Dialog" OnClientClick="showDialog(); return false;" />
        <div class="divInnerForm"></div>
        <div class="divDialog" style="display: none">
            <table style="width: 100%;">
                <tr>
                    <td>First Name: <asp:TextBox ID="txtFirstName" runat="server" Text=""></asp:TextBox></td>
                    <td>Last Name: <asp:TextBox ID="txtLastName" runat="server" Text=""></asp:TextBox></td>
                </tr>
                <tr>
                    <td>
                        How Old are You?
                        <asp:DropDownList ID="ddlAge" runat="server">
                            <asp:ListItem Value="1">1</asp:ListItem>
                            <asp:ListItem Value="2">2</asp:ListItem>
                            <asp:ListItem Value="3">3</asp:ListItem>
                        </asp:DropDownList>
                    </td>
                    <td>
                        How Many Siblings do You Have?
                        <asp:DropDownList ID="ddlNumberSiblings" runat="server">
                            <asp:ListItem Value="1">1</asp:ListItem>
                            <asp:ListItem Value="2">2</asp:ListItem>
                            <asp:ListItem Value="3">3</asp:ListItem>
                            <asp:ListItem Value="4">4</asp:ListItem>
                        </asp:DropDownList>
                    </td>
                </tr>
                <tr>
                    <td>
                        What is your birthday?
                        <input type="text" id="datepicker" name="datepicker" />
                    </td>
                </tr>
                <tr>
                    <td>
                        Please Choose a Picture to Upload:
                        <asp:FileUpload ID="fupUserPicture" runat="server" />
                    </td>
                </tr>
                <tr>
                    <td>
                        <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnUserPicture_Click" />
                    </td>
                </tr>
            </table>
        </div>
    </form>

...ダイアログを表示してフォーム内に配置するjQueryスクリプト...

    function showDialog() {
        $('.divDialog').dialog({
            modal: true, show: 'slide', width: 500,
            open: function (event, ui) {
                $('.divInnerForm').append($(this).parent());
            }
        });
    }

...そして、OnClick 関数の背後にあるコード....

 protected void btnUserPicture_Click(object sender, EventArgs e)
        {
            string fileName = "";
            if (fupUserPicture.HasFile)
            {
                try
                {
                    fileName = Path.GetFileName(fupUserPicture.FileName);
                    fupUserPicture.SaveAs(Server.MapPath("~/Images/" + fileName));
                }
                catch (Exception ex)
                {
                }
                btnSubmit.PostBackUrl = "~/Profile.aspx?pic=" + fileName;
            }
        }

編集: OK、ダイアログの送信ボタンが実際に HTML としてレンダリングされる方法を次に示します。これが問題かもしれないと思います。ご覧のように、javascript onclick は単に "Profile.aspx" をポスト バック URL として提供しますが、サーバー側のコードはすべて最初に実行する必要があるように思えます。これはフォーム内にあります...

<input id="btnSubmit" type="submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "", "Profile.aspx", false, false))" value="Submit" name="btnSubmit">

btnSubmit.PostBackUrl = "~/Profile.aspx"..そして、関数から削除した場合のレンダリング方法は次のとおりですPage_Load()....

<input id="btnSubmit" type="submit" value="Submit" name="btnSubmit">

編集 2: わかりましたので、ダイアログの外側に別の非表示の asp ボタンを追加しました。ダイアログ内のボタンOnClickは、非表示のボタンのイベントをトリガーする JavaScript 関数を呼び出します。同じこと、javascript 関数は正常に動作しますが、btnHidden_Click()関数does not run!は完全に途方に暮れています。この時点で、これが機能しない理由が文字通りわかりません。これは新しい隠しボタンで、ダイアログ div の外側ですが、ご覧のとおりフォームの内側にあります....

 </div>
        <asp:Button ID="btnHidden" runat="server" Text="" Visible="false" ClientIDMode="Predictable"  OnClick="btnHidden_Click"/>
    </form>

...これは、OnClientClick イベントを含むダイアログ内のボタンです。これは、私が言ったように正常に実行されます...

                <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="forcebtnHiddenClick(); return false;" />

そして、これは btnHidden のコード ビハインドの OnClick 関数ですが、以前とまったく同じです...

   protected void btnHidden_Click(object sender, EventArgs e)
        {
            string fileName = "";
            if (fupUserPicture.HasFile)
            {
                try
                {
                    fileName = Path.GetFileName(fupUserPicture.FileName);
                    fupUserPicture.SaveAs(Server.MapPath("~/Images/" + fileName));
                }
                catch (Exception ex)
                {
                }
                Response.Redirect("~/Profile.aspx?pic=" + fileName);
            }
        }

...そして実行するjavascript関数です、何らかの理由でbtnHidden_​​Clickが実行されません...

function forcebtnHiddenClick(e) {
    //__doPostBack('btnHidden', 'OnClick');
    $('#btnHidden').trigger('click');
}

..ご覧のとおり、.trigger('click') と __doPostBack() の両方を試しましたが、どちらも役に立ちませんでした。

編集:わかりましたので、問題は間違いなく

 function forcebtnHiddenClick() {
            __doPostBack('btnHidden', '');
}

実際にはbtnHidden_Clickイベントをトリガーしていません。btnHidden表示して直接クリックすると、関数は正常にbtnHidden_Click動作します。

編集:大量の検索の後、これを見つけて動作させました...

 function forcebtnHiddenClick() {
            <%= ClientScript.GetPostBackEventReference(btnHidden, string.Empty) %>;
        }

どうしてか分かりません

__doPostBack(<%= btnHidden.ClientID %>, '') 

動作しません。

4

4 に答える 4

6

これを試して

function showDialog() {
    $('.divDialog').dialog({
        modal: true, show: 'slide', width: 500
    });
   $(".divDialog").parent().appendTo($("form:first"));
}

空のdivInnerForm ではなく、フォームにdivDialogを追加する必要があります。その後、ボタンがフォームに表示され、そのクリックイベントがうまく発生します。

アップデート

onclient click も使用してみてください。次に、この属性を関数に接続して、非表示のボタンにポストを強制的に戻します。

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="forceClick();" />
<asp Button id="hidButton" runat="server" onclick="hidButton_Click" />

function forceClick(){

__doPostBack('<%#hidButton.UniqueId %>');
}

次に、イベント ハンドラー hidButton_Click を使用してコードを配置します。

于 2013-05-08T19:27:10.997 に答える
2
$(this).parent().appendTo('form') 

正常に動作するはずです..フォームに追加して、サーバー側のイベントを発生させます

于 2013-05-08T19:29:50.603 に答える
0

私はモーダル ダイアログを使用し、行を追加する必要があります。

var $ObjDialog = $("div[id*='div_MyPopup']");
$ObjDialog.dialog({
    modal: true
});
$ObjDialog.parent().prev().appendTo($("form:first"));
$ObjDialog.parent().appendTo($("form:first"));
于 2014-11-05T13:40:08.843 に答える