Frage

Ich habe die folgende Struktur vorhanden ist und die untere Steuer (Dropdownlist) erneut zu binden aus dem Code hinter der Mainpage.

    x MainPage1 x---- Panel1 (modal popup)
    x--------- UpdatePanel (upMailOrStatusAction, on Panel1)
    x-------------- RadioButtonList (rblActionLevel, on UpdatePanel)
    x-------------- SubForm1 (on Panel1)
    x------------------- CustomControl1 (on Subform1)
    x------------------------ DropDownList (on CustomControl1)

Was wäre der richtige Weg, dies zu erreichen?

Ich habe eine öffentliche Methode „BindMailActionLookup ()“ an die Steuerung, aber wie nenne ich es von der Hauptseite? Ich erhalte „nicht im aktuellen Kontext existieren“?

Hier ist das Markup des Unterformulars:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MailAddSubform.ascx.cs" 
Inherits="Company.Solutions.Web.Controls.MailAddSubform" %>

<%@ Register TagPrefix="st" TagName="MailActionLookup" Src="~/Controls/StMailActionLookup.ascx" %>
<div class="NinetyNinePercentWide">
    <div class="NinetyNinePercentWide EightPixelBottomMargin">
        <div class="RowHeader" style="padding-top: 20px;">
            <span class="labelfield" >Action:</span>
        </div>
        <div>
            <st:MailActionLookup ID="mailActionLookup" runat="server" />
        </div>
    </div>
    <div class="NinetyNinePercentWide EightPixelBottomMargin" >
        <br class="NinetyNinePercentWide" Text="&nbsp" />
        <div class="RowHeader" >
            <span class="labelfield" >Message:</span>    
        </div>
        <div class="TwelvePixelLeftPad" >
            <asp:TextBox ID="txtMailActionMessage" runat="server" MaxLength="40" />
        </div>
    </div>
</div>

Hier ist das Markup für die benutzerdefinierte Steuerung:

<%@ Control Language="C#" AutoEventWireup="true"        CodeBehind="StMailActionLookup.ascx.cs"     Inherits="Company.Solutions.Web.Controls.StMailActionLookup" %>


<div id="mainControlContainer" style="width:99%; padding:8px;">

<div id="comboContainer" style="float:left; padding-top:12px;padding-left:5px; padding- right:5px; padding-bottom:3px;">
  <asp:UpdatePanel runat="server" ID="mailActionUpdater">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="chkForms" EventName="CheckedChanged" />
        <asp:AsyncPostBackTrigger ControlID="chkRequested" EventName="CheckedChanged" />
        <asp:AsyncPostBackTrigger ControlID="chkOther" EventName="CheckedChanged" />
    </Triggers>
    <ContentTemplate>
        <asp:DropDownList runat="server" ID="ddlLookup" width="240px" ondatabound="ddlLookup_DataBound1" /> 
    </ContentTemplate>
  </asp:UpdatePanel>


</div>

<div id="filterContainer" style="text-align:left;padding-left:6px;width:275px">
    <fieldset style="width:260px;">
        <legend>Filters</legend>
        <asp:CheckBox ID="chkForms" runat="server" Text="Forms" AutoPostBack="true" />
        <asp:CheckBox ID="chkRequested" runat="server" Text="Requested Info" AutoPostBack="true" />
        <asp:CheckBox ID="chkOther" runat="server" Text="Other" AutoPostBack="true" />
    </fieldset>

</div>    
</div>

Und hier ist ein Teil des Codes hinter dem ich die öffentliche Methode hinzugefügt:

namespace Company.Solutions.Web.Controls
{
    public partial class StMailActionLookup : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           BindForm();
        }

        public void BindMailActionLookup()
        {
            BindForm();
        }

        protected void BindForm()
        {
            GetActionLevel();
            IEnumerable actions = GetClaimMailActions(GetFilter());
            ddlLookup.DataSource = actions;
            ddlLookup.DataTextField = "CodeAndDescription";
            ddlLookup.DataValueField = "ActionCd";
            ddlLookup.DataBind();
        }
    }
}
War es hilfreich?

Lösung 2

Ok, wir haben eine Lösung dank „womp die“ Vorschläge und einer meiner Kollegen. Nur halten die öffentlichen Anrufe in einer Kette nisten:

Dies im Hauptanspruch Info Code hinter:

    // Rebind the action code drop down to restrict to base level 
    mailAddSubform.BindMailActionLookup();

Dann ist diese im Unterformular Code hinter:

    public void BindMailActionLookup()
    {
        mailActionLookup.BindMailActionLookup();
    }

Und schließlich, dies in der Look-up-Steuerung:

  public void BindMailActionLookup()
    {
        BindForm();
    }

Andere Tipps

Sie sollten nicht die Interna von CustomControl1 einen Verbraucher aussetzen, so die richtige Art und Weise eine öffentliche Methode (vielleicht nennt es „ResetDropDowns“) auf Ihrem CustomControl1, dass die Haupt-Seite in könnte aussetzen würde nennen.

CustomControl1 kennt seine eigenen Dropdown-Listen, so kann es leicht die Kontrolle finden und binden, wenn jemand die Methode aufruft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top