2016-07-14 28 views
2

我有一個用戶可供選擇的客戶列表。當他們選擇一個客戶時,我需要加載該客戶的聯繫人。我需要從JavaScript調用該函數,所以我增加了一個按鈕:來自代碼後面的代碼的調用功能,無需回傳

<asp:Button ID="btnSample" runat="server" style="float:right;display:none" OnClick="btnSample_Click" /> 

和按鈕,然後會從我的JavaScript功能觸發:

function OnGetCustomer(result){ 
       document.getElementById('lblCustID').innerHTML = result.ID; 
       document.getElementById('lblCustName').innerHTML = result.Name; 
       document.getElementById("btnSample").click(); 
} 

後面的代碼加載聯繫人:

protected void btnSample_Click(object sender, EventArgs e) 
    { 
     RateSheet r = new RateSheet(ID, Company.Current.CompanyID); 
     if (!string.IsNullOrEmpty(lblCustID.Text)) 
     { 
      Customer c = new Customer(int.Parse(lblCustID.Text)); 

      bool e2 = false; 
      foreach (Customer.CustomerContact cc in c.Contacts) 
      { 
       HtmlGenericControl li = new HtmlGenericControl("li"); 
       CheckBox cb = new CheckBox(); 
       cb.ID = "cbCustContact_" + cc.ID; 
       cb.Checked = true; 
       if (!string.IsNullOrEmpty(cc.Email)) 
       { 
        cb.Text = cc.Email; 
        cb.TextAlign = TextAlign.Right; 
        li.Controls.Add(cb); 
        ulCustContacts.Controls.Add(li); 
       } 
      } 
     } 
    } 

我需要從lblCustID的值來找到客戶的聯繫人。問題是按鈕導致回發,我失去了我選擇的客戶,所以lblCustID總是回到零。如何停止回發,以免丟失任何價值?

+0

將customerid添加到hiddenfield中,以便在回發發生時將它發佈到服務器,並且您可以在服務器端讀取它。 – Esko

+0

聽起來像你需要ajax請求 – Jamiec

回答

1

lblCustID標籤或輸入?在回發中保存更改的唯一*控件是輸入。您可以使用<asp:HiddenField />或任何<input runat="server" ... />發送後臺代碼的信息。

*隨着諸如dropdownlists等其他控件

+0

'lblCustID'是一個標籤。所以把它改爲HiddenField就行了。但是由於回發,我仍然失去了像'lblCustName'這樣的其他標籤。將它改爲''使其成爲一個文本框。有沒有辦法將它設置爲標籤,以便它仍然保留在回發中? – user123456789

+0

你是否也在通過javascript更改這些標籤?無論哪種方式,標籤不會保存在ASP視圖狀態(一個隱藏的字段asp用來重新填充postback後的控件)。做到這一點的方法是將每個標籤與隱藏的控件配對,然後在頁面加載時將標籤文本更改爲隱藏控件中的值 –

+0

您是什麼意思改變標籤? – user123456789

2

您可以使用異步調用來實現這一目標:

設置的AutoPostBack =「假」防止按鈕回發的onclick

<asp:Button ID="btnSample" runat="server" style="float:right" AutoPostback="false" /> 

或者只是添加一個原始的HTML按鈕(注意:添加一個類型=「按鈕」或這將導致回發):

<button id="btnSample" type="button">Click</button> 

然後一個事件偵聽器添加到該按鈕,執行Ajax調用:

$(document).on('click', '[id$=btnSample]', function() { 
    ajax({ 
     url: 'path/to/handler', 
     method: 'POST', 
     data: { key: 'value', ... }, 
     success: function(data) { 
     OnGetCustomer(data); 
     }, 
     error: function() { 
     console.log('Error on ajax call!'); 
     } 
    }); 
}); 

注意:你必須將你的cobebehind代碼到一個通用的處理程序來處理Ajax調用和返回結果