手动回发在asp.net中不起作用

时间:2013-03-05 12:05:17

标签: c# javascript jquery asp.net

我正在尝试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名称。但就我而言,它始终显示“首次加载”#39;这意味着页面不会将其识别为回发。我想提升服务器端CheckBox_changed事件。

请帮忙。

1 个答案:

答案 0 :(得分: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的客户端按钮?