在回发上加载用户控件并根据父页面文本框值 c# 加载数据
Load usercontrol on postback and load data based on parent page textbox value c#
这可能真的很简单,但我似乎根本无法从父页面获取我的值?
Aspx 页面在母版页内,ContentP 以代码为例
<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);
}
用户控件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
}
根据我的评论 - 你最好在你的控件中定义一个 属性 然后让页面传递它,我已经有一段时间没有这样做了,但基本的想法是 -
尽在您的掌控之中
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);
这可能真的很简单,但我似乎根本无法从父页面获取我的值?
Aspx 页面在母版页内,ContentP 以代码为例
<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);
}
用户控件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
}
根据我的评论 - 你最好在你的控件中定义一个 属性 然后让页面传递它,我已经有一段时间没有这样做了,但基本的想法是 -
尽在您的掌控之中
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);