1

ページ:

<body>
 <form id="frmLogin" runat="server">  
  <asp:Button ID="btnClick" OnClientClick="openConfirmDialog();" OnClick="PopulateLabel"  runat="server"/>
  <div id="divDialog"></div>
  <asp:Label ID="lblText" runat="server"></asp:Label>
 </form>
</body>

JS

<script type="text/javascript">
 $(document).ready(function() {
 $("#divDialog").dialog({autoOpen: false,
                     buttons: { "Ok": function()
                                      { 
                                         $(this).dialog("close");
                                      },
                                "Cancel": function()
                                      { 
                                          $(this).dialog("close");
                                      }
                              } 
                   });
 });

 function openConfirmDialog()
 {
  $("#divDialog").dialog("open");
 }

C#

protected void Page_Load(object sender, EventArgs e)
 {
    lblText.Text = "";
 }

protected void PopulateLabel(object sender, EventArgs e)
 {
    lblText.Text = "Hello";
 }

このコードは、[OK]と[キャンセル]ボタンのあるダイアログボックスを開きますが、ユーザーアクティビティを待たずにページをすぐに投稿すると、ラベルが表示されます。ユーザーアクティビティに基づいてc#関数を呼び出す必要があります。ユーザーが[OK]をクリックすると、ラベルが表示され、[キャンセル]をクリックすると、c#関数は呼び出されません。どうすればこれを達成できますか?

4

2 に答える 2

4

まず、ページがすぐにサーバーにポストバックされないようにするには、ハンドラーからclick戻ってイベントのデフォルトの動作をキャンセルする必要があります。false

<asp:Button ID="btnClick" runat="server" OnClick="PopulateLabel"
    OnClientClick="openConfirmDialog(); return false;" />

Ok次に、ボタンがクリックされたときに自分でポストバックを実行する必要があります。

$("#divDialog").dialog({
    autoOpen: false,
    buttons: {
        "Ok": function() { 
            $(this).dialog("close");
            __doPostBack("btnClick", "");
        },
        "Cancel": function() { 
            $(this).dialog("close");
        }
    }
});

の最初の引数__doPostBack()は、コントロールの名前UniqueID( ASP.NETの用語では)であることに注意してください。ボタンは要素の直接の子であるため、呼び出しでボタン<form>をハードコーディングできますが、コンテナ階層に存在する場合はさらに複雑になります。その場合、ClientScript.GetPostBackEventReference()を使用して、への適切な呼び出しを生成できます。id__doPostBack()__doPostBack()

編集:ページにはポストバック対応のコントロールが含まれていないため__doPostBack()、クライアント側で定義されません。この問題を回避するには、 Buttonコントロールの代わりにLinkBut​​tonコントロールを使用できます。

于 2010-12-08T07:47:24.933 に答える
0

別のボタンを追加し、jQueryのclick()イベントを使用して、新しいボタンのクリックイベントをトリガーしました。これにより、C#でそれぞれのイベントハンドラーがトリガーされます。

于 2010-12-11T08:16:20.893 に答える