从父页面操作子控件

时间:2011-06-28 15:07:45

标签: c# asp.net

答案可能是显而易见的,但我没有看到任何我可以使用的东西,除了相反的 - 操纵孩子的父母 - 所以我发布了新的。

我有一个我正在购买的购物车系统我公司购买并且我是.NET的新手,所以我甚至可能没有正确地问这个。

我的商店在结帐部分有一个页面,看起来基本上是这样的:

PaymentPage.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PaymentPage.ascx.cs" Inherits="ConLib_PaymentPage" %>
<%@ Register Assembly="CommerceBuilder.Web" Namespace="CommerceBuilder.Web.UI.WebControls" TagPrefix="cb" %>
<%@ Register Src="~/Checkout/PaymentForms/CreditCardPaymentForm.ascx" TagName="CreditCardPaymentForm" TagPrefix="uc" %>
<ajax:UpdatePanel ID="PaymentAjax" runat="server">
    <ContentTemplate>

            On page controls, etc.
            Then a checkbox saying they've read the terms and agree:
    <div id="terms">
        <asp:CheckBox ID="AgreeTerms" runat="server" Text="I agree to the Terms Of Service" CssClass="Terms" AutoPostBack="True" OnCheckedChanged="AgreeTerms_Clicked"/>
    </div>

我想要完成的任务是在OnCheckedChanged事件中我要启用或禁用CreditCardPaymentForm控件中的图像按钮。

该代码如下所示:

<%@ Control Language="C#" ClassName="CreditCardPaymentForm" EnableViewState="false" %>
<%@ Register Assembly="CommerceBuilder.Web" Namespace="CommerceBuilder.Web.UI.WebControls" TagPrefix="cb" %>
<%@ Register assembly="wwhoverpanel" Namespace="Westwind.Web.Controls" TagPrefix="wwh" %>

... a <script> block with some code and then HTML

<span class="TTAActionButton">
    <br>
    <asp:ImageButton ID="CreditCardButton" runat="server" ToolTip="Pay With Card" SkinID="TTAPlaceOrder" OnClick="CreditCardButton_Click" />
    <asp:HiddenField runat="server"  ID="FormIsSubmitted" value="0" />
    <br /><br /><br />
</span>

我希望能够打开和关闭CreditCardButton,具体取决于是否选中了复选框。我会在页面代码隐藏中有例程:

public void AgreeTerms_Clicked(object sender, EventArgs e)
{
    if (AgreeTerms.Checked)
        CreditCardButton.Enabled = false;
}

但我尝试的每一种排列都失败了。

我缩写了代码,但如果我遗漏了太多请告诉我。

感谢您的帮助,如果您认为我对.NET一无所知,那么请多谢! 吉姆

2 个答案:

答案 0 :(得分:1)

在CreditCardPaymentForm控件中,创建一个公开CreditCardButton可见性的属性,而不是使用OnCheckedChanged函数处理程序中父级的可见性。

public bool ShowCreditCardButton
{
   get { return CreditCardButton.Visable; }
   set { CreditCardButton.Visable = value; }
}

答案 1 :(得分:0)

CreditCardPaymentForm是否包含PaymentPage.ascx?也就是说,表单“使用”PaymentPage用户控件吗?

如果是这样,最好的办法是在支票页面上发布一个事件,该事件是通过选中复选框引发的:

public void AgreeTerms_Clicked(object sender, EventArgs e)
{
    if (AgreeTerms.Checked)
        OnTermsAgreed();
}

private void OnTermsAgreed()
{
    // raise TermsAgreed event
    var evt = TermsAgreed;
    if (null != evt)
        evt(this, EventArgs.Empty);
}
public event EventHandler TermsAgreed;

然后,CreditCardPaymentForm订阅该事件并“做其事”,在您的情况下,启用它知道的按钮。