2

我正在尝试手动操作PostBackPage但不知何故它不起作用。我不确定我在这里做错了什么。我正在使用 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);
                  }
       }

所以当我它应该回CheckCheckBox到服务器并且应该出现 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 进行回发,您有两种选择。首先,您可以像这样调用 _doPostback:

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

其中 btnName 是页面上按钮的名称。

其次,您可以简单地在页面上有一个隐藏的按钮,但有一个与之关联的事件处理程序。您的客户端按钮单击调用作为 JS 函数的调用,该函数为您单击服务器按钮:像这样:

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

当然,这似乎是多余的,因为为什么 Yes 按钮没有自己的事件处理程序,而 No 按钮是返回 false 的客户端按钮?

于 2013-03-05T12:16:46.287 回答