메인 페이지 코드에서 중첩 컨트롤을 바인딩하는 방법
문제
다음 구조를 갖추고 있으며 메인 페이지 뒤의 코드에서 더 낮은 컨트롤 (Dropdownlist)을 다시 반짝이야합니다.
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)
이것을 달성하는 올바른 방법은 무엇입니까?
컨트롤에 공개 메소드 "bindmailActionLookup ()"를 추가했지만 메인 페이지에서 어떻게 호출합니까? 나는 "현재 상황에 존재하지 않는다"는 것입니까?
다음은 하위 형태의 마크 업입니다.
<%@ 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=" " />
<div class="RowHeader" >
<span class="labelfield" >Message:</span>
</div>
<div class="TwelvePixelLeftPad" >
<asp:TextBox ID="txtMailActionMessage" runat="server" MaxLength="40" />
</div>
</div>
</div>
사용자 정의 컨트롤의 마크 업은 다음과 같습니다.
<%@ 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>
그리고 여기 공개 방법을 추가 한 코드의 일부가 있습니다.
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();
}
}
}
해결책 2
좋아, 우리는 "WOMP의"제안과 동료 중 한 명 덕분에 해결책이 있습니다. 체인에서 대중의 전화를 계속 둥글게하십시오.
이것은 기본 클레임 정보 코드 뒤에 있습니다.
// Rebind the action code drop down to restrict to base level
mailAddSubform.BindMailActionLookup();
그런 다음 이것들은 다음의 하위 형식 코드에서 다음과 같습니다.
public void BindMailActionLookup()
{
mailActionLookup.BindMailActionLookup();
}
그리고 마지막으로, 이것은 조회 제어에서 :
public void BindMailActionLookup()
{
BindForm();
}
다른 팁
CustomControl1의 내부를 소비자에게 노출시키지 않아야하므로 가장 올바른 방법은 메인 페이지가 호출 할 수있는 CustomControl1에 공개 메소드 ( "재설정"이라고 부르는 것일 수 있습니다.
CustomControl1은 자체 드롭 다운에 대해 알고 있으므로 누군가가 방법을 호출 할 때 컨트롤을 쉽게 찾아서 반드시 할 수 있습니다.
제휴하지 않습니다 StackOverflow