2011-04-21 57 views
1

我是一個.NET新手,所以請忍受我。按鈕更新自己的OnClientClick,然後執行它?

我正在網上商店工作。它要求訪問者選擇他們想要的數量,然後點擊一個按鈕爲這些項目(旅遊)選擇一個日期。

我有兩個按鈕 - 一個讀取他們的選擇並更新另一個的OnClientClick值,並在單擊該按鈕時執行彈出窗口。該項目需要我只用一個按鈕來完成整個過程。下面是細節的粗線條:

設置按鈕:

//Calculates parameters to send to popup based on control contents. 
    public void btnSetup_Click(object sender, EventArgs e) 
    { 
     StringBuilder sbParams = new StringBuilder(); 
     TotalQty += basketItem.Quantity;      
     Sku = variant.Sku;       
     sbParams.Append(string.Format("?sku={0}&Qty={1}",Sku.Substring(0,4),TotalQty)); 

     popup = string.Format("window.open('http://somesite.ocm/cal.asp{0}','Reservation Calendar','width=265,height=465')",sbParams.ToString()); 
    btnCalendar.OnClientClick = popup; 
    } 

日曆按鈕:

// Shows popup via OnClientClick 
    public void btnCalendar_Click(object sender, EventArgs e) 
    { 
     AddPopup.Show(); 
    } 

它工作正常,爲兩個步驟,單擊設置,然後單擊日曆按鈕。如果我將設置代碼移到日曆例程中,則失敗。我確定這是因爲日曆按鈕的OnClientClick在被點擊時未設置。

什麼是最佳實踐類型的方式來做到這一點,而不需要重新構造整個程序。由於我是.NET編程新手,我不想破壞這個東西。

+0

所以用戶需要能夠選擇一個日期,基於該日期看到一個東西的彈出,能夠從彈出窗口中選擇一些東西,並繼續? – R0MANARMY 2011-04-21 20:10:05

+0

是的,Romanarmy,沒錯。 – Deverill 2011-04-25 19:22:18

回答

1

我會更改您的代碼設置您ButtonPage_Load它是典型的對頁面做太多的設置/準備的:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     StringBuilder sbParams = new StringBuilder(); 
     TotalQty += basketItem.Quantity; 
     Sku = variant.Sku; 
     sbParams.Append(string.Format("?sku={0}&Qty={1}", 
      Sku.Substring(0,4),TotalQty)); 
     popup = string.Format("window.open('http://somesite.ocm/cal.asp{0}', 
      'Reservation Calendar','width=265,height=465')", 
      sbParams.ToString());   
     btnCalendar.OnClientClick = popup; 
    } 
} 

你的問題是你正在嘗試使用服務器端方法向客戶端添加一些操作。客戶端方法首先觸發,然後觸發服務器端,所以如果添加功能服務器端,客戶端操作已經傳遞了它的執行點並且什麼都不做。

如果您需要此Button採取不同的行動或重複多次,您應該查看發生的某些綁定操作期間的設置。如果不是在開始時在Page_Load中執行。

從你的榜樣,我不知道爲什麼你更在乎的服務器端事件,所以你可以改變你的OnClientClick是:

popup = string.Format("window.open('http://somesite.ocm/cal.asp{0}', 
    'Reservation Calendar','width=265,height=465'); return false;", 
    sbParams.ToString());   

通知的return false;。這將導致窗口打開,但也告訴頁面不回發給服務器。

+0

感謝Kelsey。我沒有在Page_Load中做按鈕的原因是數量在點擊按鈕之前可能會改變。我需要重新評估他們何時準備好去日曆。服務器端是數量設置的地方。 – Deverill 2011-04-25 19:23:42

+0

雖然這不是我尋找的答案,但我將其標記爲答案,因爲它有一些非常好的信息,它的目標是,並且沒有更好的提供。所有充分的理由給予幫助提供信貸。 – Deverill 2011-04-28 12:52:54

0

以下代碼片段可能會對您有所幫助。

<asp:Button id="btnSubmit" runat="server" onclick="btnSubmit_Click" OnClientClick="javascript:ShowPopup();"" ></asp:Button> 

JS

function ShowPopup() 
{ 
//Code for popup window 

} 
+0

我想弄清楚你在這裏回答什麼問題... – NotMe 2011-04-21 21:00:35

相關問題