2013-03-05 37 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