2

私は手動でしようとしPostBackていPageますが、どういうわけかそれは機能していません。ここで何が間違っているのかわかりません。Jqueryダイアログボックスを使用していて、ページをポストバックする前に確認ボックスを配置しています。これが私のコードです。

HTML

 <form id="form1" runat="server">
          <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
          <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />

    <asp:CheckBox ID="cbIsCollected" runat="server"  AutoPostBack="false" Checked='<%# MWClickAndCollectHelper.CheckOrderCollectedStatus(AlwaysConvert.ToInt(Eval("OrderId"))) %>'
         OnCheckedChanged="cbIsCollected_CheckedChanged" CssClass="isCollectedCheckBox" />
</form>

JAVASCRIPT

var isCollectedCheckBox = $('.isCollectedCheckBox input[type=checkbox]');

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();
            }
      }

$(isCollectedCheckBox).on("change", function () {
                  var checked = this.checked;
                  var checkbox = this;
                  if (checked) {
                  checkbox.checked = true;
                  __doPostBack(checkbox, 'JavaScript');
                 }
                });

コードビハインド

protected void Page_Load(object sender, EventArgs e)
      {
            ClientScript.GetPostBackEventReference(this, string.Empty);

                  string targetCtrl = Page.Request.Params.Get("__EVENTTARGET");
                  postbackId.Text = targetCtrl ?? "First Time Loaded";
                  if (!Page.IsPostBack)
                  {
                        BindGridView(gvOrders, CNCOrderCollection);
                  }
       }

したがって、CheckサーバーCheckBoxにポストバックすると、ControlID名が表示されます。しかし、私の場合は常に「初回ロード」と表示されます。つまり、ページはそれをポストバックとして認識しません。CheckBox_changedサーバーサイドイベントを発生させたい。

助けてください。

4

1 に答える 1

1

なぜ「手動で」投稿しようとしているのですか?チェックボックスコントロールにはポストバックハンドラーがあります。AutoPostBackをtrueに変更し、OnCheckedChangedをサーバー側のイベントメソッドの名前に設定します。クリックを送信したコントロールを取得したい場合は、それが送信者の目的です。例:

<asp:CheckBox ID="cbIsCollected" runat="server"  AutoPostBack="Trye" 
OnCheckedChanged="cbIsCollected_CheckedChanged" CssClass="isCollectedCheckBox" />

Protected Sub cbIsCollected_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    dim cbSender as checkbox
    cbSender = ctype(sender, checkbox)

end Sub

このコードがあなたが探しているものを達成していない場合は、私に知らせてください。

編集:

JSからポストバックを実行する場合は、2つのオプションがあります。まず、次のように_doPostbackを呼び出すことができます。

function someFunction()
    {
     __doPostBack('btnName','');
    } 

ここで、btnNameはページ上のボタンの名前です。

次に、ページ上に非表示になっているが、イベントハンドラーが関連付けられているボタンを設定するだけです。クライアント側のボタンクリックは、サーバーボタンのクリックを実行するJS関数として呼び出しを呼び出します。次のようになります。

function clickButton() {
var getBtn = document.getElementById('<%= btnName.ClientId %>')
getBtn.click()
}     

もちろん、これは冗長に思えます。なぜ、[はい]ボタンには独自のイベントハンドラーがあり、[いいえ]ボタンはfalseを返すクライアント側のボタンではないのでしょうか。

于 2013-03-05T12:16:46.287 に答える