这可能非常简单,但我似乎无法从父页面中获取我的价值观?
Aspx页面位于主页面内,ContentPwith代码
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:TextBox ID="tbFromDate" runat="server" ></asp:TextBox>
<asp:Button ID="butDisplayInfo" runat="server" Text="Display info" OnClick="butDisplayInfo_Click"
CssClass="button-gray" />
<asp:PlaceHolder ID="placeHolderContent" runat="server">
</asp:PlaceHolder>
我想要的是按下按钮时它会加载UserControl并根据文本框中的日期加载数据,然后我可以使用该数据将数据加载到控件中?
.aspx.cs
protected void butDisplayInfo_Click(object sender, EventArgs e)
{
var ctrl = LoadControl("~/Controls/DailyShiftStats.ascx");
ctrl.ID = "ucUserCtrl1";
placeHolderContent.Controls.Add(ctrl);
}
Usercontrol ascx.cs
protected void Page_Load(object sender, EventArgs e)
{
TextBox tb = (TextBox)this.Parent.Page.FindControl("ContentPlaceHolder1").FindControl("tbFromDate");
Response.Write(tb.Text);
}
public void getShiftInfo(DateTime shiftDate)
{
//load my data
}
答案 0 :(得分:1)
根据我的评论 - 您最好在控件中定义一个属性,然后将页面传递给我,我暂时没有这样做,但基本的想法是 -
在你的控制中
public DateTime? ShiftDate
{
set { this.shiftDate = value; }
}
private DateTime? shiftDate;
然后你可以在你需要的控件中的任何地方使用shiftDate,如果你把它设置为Nullable,那么你可以检查它是否已经设置并抛出一个错误(或任何合适的)如果没有。
在您创建控件的页面中,您将拥有(注意:您需要将控件转换为正确的类型)
var ctrl = (DailyShiftStats)LoadControl("~/Controls/DailyShiftStats.ascx");
ctrl.ID = "ucUserCtrl1";
//TODO: Handle an invalid date
DateTime shiftDate;
if (DateTime.TryParse(tbFromDate.Text, out shiftDate))
{
ctrl.ShiftDate = shiftDate;
}
placeHolderContent.Controls.Add(ctrl);