web-dev-qa-db-ja.com

コードビハインドからasp.netのasp:buttonsを非表示および表示する方法は?

私はasp.netWebアプリケーションに取り組んでいます。 1つのページに2つのaspボタンがあります。 1つの条件で表示したいのですが、そうでない場合は表示したくありません。だから私はこのように同じことをしようとしています。しかし、それは機能していません。その背後にある理由を見つけることができません。問題はどこにあるのか教えてください。

ボタンを非表示にするには

if (!IsPostBack)
            {
                ButtonReplaceId.Style.Add("display", "none");
                ButtonAssociateRules.Style.Add("display", "none");
            }

ボタンを表示するには

protected void ApplyAssociation(object sender, EventArgs e)
{
//Some piece of code
if(a==0)
{
ButtonAssociateRules.Style.Add("display", "block");
ButtonReplaceId.Style.Add("display", "block");
}

}

ボタンのaspx

    <div style ="padding-left:400px;">
        <asp:Button ID="ButtonAssociateRules" runat="server" OnClick="AssociateMultipleRulesButtonClick"
            CssClass="search_button_in_vm_intersection" Text="Associate Multiple Rules" 
            OnClientClick="return OnClientClickAssociateRewardRuleFile();" />

        <asp:Button ID="ButtonReplaceId" runat="server" OnClick="ApplyReplaceIfRuleIntersects"
            CssClass="search_button_in_vm_intersection" Text="Replace Previous Rules" 
            OnClientClick="return OnClientClickReplaceRewardRuleFile();" />

    </div>

onClickイベントApplyAssociation()のボタンのaspx

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
                </Triggers>
                <ContentTemplate>
                <asp:Table runat="server" CssClass="rule_file_whole" BorderWidth="0" Style="padding-top: 30px;">
                <asp:TableRow ID="MerchantRowAssociation" HorizontalAlign="Center">
                            <asp:TableCell>
                                <div style="text-align: center">
                                    <asp:Button ID="AssociationMerchant" Text="Apply Association" runat="server" OnClick="ApplyAssociation"
                                        CssClass="search_button_in_vm_associate1 " OnClientClick="return checkValidation()" />
                                </div>
                            </asp:TableCell>
                        </asp:TableRow>
                                            </asp:Table>
                </ContentTemplate>
            </asp:UpdatePanel>
5
user3264676

条件付き更新パネルを使用しているので、更新パネル内にボタンを配置した後、これらのいずれかを試すことができます。

    protected void ApplyAssociation(object sender, EventArgs e)
    {
        //Some piece of code
        if (a == 0)
        {
            ButtonAssociateRules.Style["visibility"] = "hidden";
            ButtonReplaceId.Style["visibility"] = "hidden";
            myUpdatePanel.Update();
        }
    }
    protected void ApplyAssociation(object sender, EventArgs e)
    {
        //Some piece of code
        if (a == 0)
        {
            ButtonAssociateRules.Visible = false;
            ButtonReplaceId.Visible = false;
            myUpdatePanel.Update();
        }
    }

更新パネル内のボタンの例を次に示します。

<asp:UpdatePanel ID="myUpdatePanel" runat="server" UpdateMode="Conditional">
     <ContentTemplate>
          <div style="padding-left:400px;">
               <asp:Button ID="ButtonAssociateRules" runat="server" OnClick="AssociateMultipleRulesButtonClick"
                    CssClass="search_button_in_vm_intersection" Text="Associate Multiple Rules" 
                    OnClientClick="return OnClientClickAssociateRewardRuleFile();" />
               <asp:Button ID="ButtonReplaceId" runat="server" OnClick="ApplyReplaceIfRuleIntersects"
                    CssClass="search_button_in_vm_intersection" Text="Replace Previous Rules" 
                    OnClientClick="return OnClientClickReplaceRewardRuleFile();" />
          </div>
     </ContentTemplate>
</asp:UpdatePanel>
5
BobbyDazzler

Visibleの-​​ Button プロパティを簡単に使用できます。これはより簡単でクリーンです。

ButtonReplaceId.Visible = false;

このプロパティがfalseの場合、サーバーコントロールはレンダリングされません。ページのレイアウトを整理するときは、これを考慮に入れる必要があります。コンテナコントロールがレンダリングされない場合、個々のコントロールのVisibleプロパティをtrueに設定しても、コンテナコントロールに含まれるコントロールはレンダリングされません。その場合、明示的にtrueに設定していても、Visibleプロパティに対して個々のコントロールはfalseを返します。 (つまり、親コントロールのVisibleプロパティがfalseに設定されている場合、子コントロールはその設定を継承し、設定はどのローカル設定よりも優先されます。) [〜#〜] msdn [〜#〜]

あなたは現在のUpdatePanelにないajax呼び出しで制御の状態を変更しようとしています。ボタンを同じUpdatePanelに配置すると、状態を変更できるようになります。

4
Adil
ButtonReplaceId.Visible = false;
ButtonAssociateRules.Visible = false;
1
Dumisani