我正在尝试PostBack
Page
手动,但不知何故它不起作用。我不确定我在这里做错了什么。我正在使用Jquery对话框并在发回页面之前放置确认框。这是我的代码。
<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>
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
事件。
请帮忙。
答案 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的客户端按钮?