2013-03-05 60 views
2

我想PostBackPage手动,但不知何故其不工作。我不知道我在这里做错了什么。我正在使用Jquery对话框并在发回页面之前放置确认框。这是我的代码。手动回发不能在asp.net工作

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应该回发到服务器和控件ID名称应该会出现。但在我的情况下,它总是显示'首次装入'。这意味着页面不会将其识别为回传。我想提高服务器端CheckBox_changed事件。

请帮忙。

+0

http://stackoverflow.com/questions/13475428/asp-net-manual-postback-not-working-from-dynamically-created-linkbutton – 2013-03-05 12:08:35

+1

不应该做的__doPostBack调用是__doPostBack(checkbox.id, '的JavaScript'); ? – jbl 2013-03-05 12:19:56

+0

查看我的编辑。我声明变量为'isCollectedCheckBox' – 2013-03-05 12:26:27

回答

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按钮只是有它自己的事件处理程序和“否”按钮是返回false的客户端按钮?

+0

我正在做手动,因为我在Jquery做了一些工作,如果他们按是然后发布回来,如果他们按没有然后没有回发,我显示确认对话框给用户。 – 2013-03-05 12:18:53

+3

只要调用你的JS OnClientClick并返回false,如果你不想按钮回发。 – 2013-03-05 12:27:58

相关问题