繁体   English   中英

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

[英]manual postback does not work in 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名称。 但就我而言,它始终显示“首次加载”。 这意味着页面无法将其识别为回发。 我想引发服务器端CheckBox_changed事件。

请帮忙。

您为什么要尝试“手动”发回邮件? 复选框控件具有回发处理程序。 将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()
}     

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM