MasterPage按钮单击事件不会在第一次单击时触发,而是在第二次单击时触发

时间:2013-02-19 19:37:48

标签: c# asp.net events

您好,感谢您的帮助。 这是我的问题:

  • 我有一个分为MasterPage和主页的网页。
  • 这两个页​​面中的任何内容都没有动态设置(没有代码隐藏),它们都在.aspx页面上设置。
  • 在MasterPage上,我有一个“保存”按钮。
  • 在主页面上,我有几个文本框。
  • 主页面文本框有一个事件(void SumAll(...)),当焦点离开任何这些复选框时会触发该事件。
  • 在MasterPage上,我有一个点击事件连接到“保存”按钮。

这就是发生的事情:

  • 我对主页面上的任何一个文本框进行了更改,但焦点不会离开此文本框(没有任何SumAll()事件正在关闭)。
  • 然后单击MasterPage中的“保存”按钮。

我希望MasterPage“保存”按钮单击事件可以触发,但它永远不会!将触发Main Page textchange(SumAll())事件,但MasterPage click事件不会触发。

如果我再次单击MasterPage“保存”按钮,MasterPage单击事件会成功触发,但当然不会触发Main Page textchanged事件。当我点击MasterPage“保存”按钮而不对主页进行任何更改时,情况也是如此。

以下是我的代码示例。 主页textchanged事件:

protected void SumTheAmounts(object sender, EventArgs e)
    {
        Decimal lease = 0.00M;
        Decimal securityDeposit = 0.00M;
        Decimal miscellanious = 0.00M;
        Decimal sumTotal = 0.00M;

        Decimal.TryParse(txtMiscellaneousAmount.Text, out miscellanious);
        Decimal.TryParse(txtSecurityDepositAmount.Text, out securityDeposit);
        Decimal.TryParse(txtLeaseAmount.Text, out lease);

        sumTotal = miscellanious + securityDeposit + lease;
        txtAmount.Text = sumTotal.ToString();

        // Set focus to the next textbox
        TextBox tb = (TextBox)sender;
        switch (tb.ID)
        {
            case "txtLeaseAmount":
                txtSecurityDepositAmount.Focus();
                break;
            case "txtSecurityDepositAmount":
                txtMiscellaneousAmount.Focus();
                break;
            case "txtMiscellaneousAmount":
                txtMiscellaneousAmount.Focus(); // Send back to the same. .
                break;
            default:
                break;
        }
    }

我的MasterPage的“保存”按钮点击事件:

    protected void btnSave_Click(object sender, EventArgs e)
    {
        // Save every little thing...
        switch (ContentPageLoaded)
        {
            case "CheckRequest":
                ((CheckRequest)ContentMain.Page).UpdateMe();
                break;
            case "PicturesLoad":
                ((PicturesLoad)ContentMain.Page).UpdateMe();
                break;
            default:
                break;
        }
    }

标记:

<asp:Panel ID="pnlSave" CssClass="ButtonClass" runat="server">
   <asp:Button ID="btnSave" style="width:160px; font-size:small; position:relative; color:Blue; top: 0px; left: 0px;" runat="server" Text="Save" onclick="btnSave_Click" CausesValidation="False" /> 
</asp:Panel>

pageLoad的:

if (!IsPostBack) 
{ 
   Button saveButton = (Button)Master.FindControl("btnSave"); 
   branchName = (string)Session["BranchName"]; 
   branchLegalData = new Classes.BranchLegalData(); 
   if ((branchName != null) && (branchName.Length > 0)) 
   { 
      FillThisPageData(); 
   } 
} 
else { } 
Master.ContentPageLoaded = "CheckRequest"; 

非常感谢任何帮助! 感谢

2 个答案:

答案 0 :(得分:1)

这是一个黑暗中的镜头,但尝试设置autopostback =&#34; false&#34;对于所有文本框。我怀疑可能发生的事情是,当你将焦点放在文本框上然后一下子点击按钮时,你正在发射两个回发。

只有将autopostback设置为true才会发生这种情况。

答案 1 :(得分:0)

谢谢大家!

在文本框上设置autopostback =“false”! 我认为发生的事情是autopostback =“true”,文本框会触发它自己的文本更改事件,并且由于某种原因,MasterPage按钮单击事件在此之后不会触发?! 有人可以告诉我为什么文本框事件会触发而不是按钮事件???

无论如何,这个问题已得到修复,我感谢所有的输入......你们摇滚!

史蒂夫