【发布时间】:2015-03-17 14:31:02
【问题描述】:
我在母版页和子页中有一些标签。所有这些标签中的值都来自一个单个数据库查询。我想运行这个查询一次,以便填充主和子中的标签。有办法吗?
这是我的问题最简化的版本
这里是我如何初始化母版页的page_load中的公共属性(我使用viewstate以便其他方法也可以使用这些属性)
protected void Page_Load(object sender, EventArgs e)
{
Meeting = bal.GetMeetingByID(MeetingID)[0];//DB QUERY
}
页面加载中的属性如下
public Meeting1 Meeting
{
set
{
ViewState["Meeting"] = value;
}
get
{
if (ViewState["Meeting"] != null)
return (Meeting1)ViewState["Meeting"];
else
return null;
}
} private int meetingID = -1;
public int MeetingID
{
get
{
if (meetingID == -1)
try
{
meetingID = int.Parse(Request.QueryString["meetingID"]);
}
catch (Exception)
{
Response.Redirect("~/Main.aspx");
}
return meetingID;
}
}
现在在我的子页面中
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
DataBindControls();
}
private void DataBindControls()
{
tbMeetingTitle.DataBind();
}
Meeting.aspx 页面是这样的
<tr>
<td>Meeting Title</td>
<td colspan="3">
<asp:TextBox ID="tbMeetingTitle" runat="server" Width="714px" Text='<%# GetData("MeetingTitle") %>' AutoPostBack="true" ></asp:TextBox></td>
</tr>
我希望现在我的问题很清楚。
【问题讨论】:
-
您想要这样做的事实意味着您的设计中存在更深层次的问题。您应该仅谨慎使用视图状态(如果有的话)。为什么需要在每一页上运行一个查询?
-
除了masterpage的page_load之外,还有很多函数使用了这些属性。因此我必须在属性中使用视图状态。其次,我在主页上快速跳转,每个新选择都会加载新会议。因此,我需要在每次加载母版页时运行查询 Meeting = bal.GetMeetingByID(MeetingID)[0];//DB QUERY
-
这是XY Problem。您询问了您想到的解决方案,而不是描述问题。如果由于某种原因您需要为每个页面加载查询,那么有更好的位置。您可以使用
global.asax中的函数在每个请求的开头运行查询。或者,您可以通过将查询放在所有其他页面继承的基本页面中,将查询放在生活方式的早期。
标签: c# asp.net controls master-pages page-lifecycle