Button更新自己的OnClientClick,然后执行它?

时间:2011-04-21 19:32:36

标签: c# javascript asp.net

我是.NET新手,所以请耐心等待。

我正在网上商店工作。它要求访问者选择他们想要的数量,然后单击按钮选择这些项目的日期(游览)。

我有两个按钮 - 一个读取他们的选择并更新另一个的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编程的新手,我不想破坏它。

2 个答案:

答案 0 :(得分:1)

我会更改您的代码,以便在Button上设置Page_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;。这将导致窗口打开,但也告诉页面不要回发到服务器。

答案 1 :(得分:0)

以下代码段可能会对您有所帮助。

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

<强> JS

function ShowPopup()
{
//Code for popup window

}