C# 母版页中的页面加载在Page.pageload之后访问
我在母版页和子页中都有一些标签。所有这些标签中的值都来自一个单数据库查询。我想运行此查询一次,以便填充主数据库和子数据库中的标签。有办法吗 这是我问题的最简化版本 下面是我如何在母版页的页面加载中初始化公共属性(我使用viewstate,以便其他方法也可以使用这些属性) 页面加载中的属性如下所示C# 母版页中的页面加载在Page.pageload之后访问,c#,asp.net,controls,master-pages,page-lifecycle,C#,Asp.net,Controls,Master Pages,Page Lifecycle,我在母版页和子页中都有一些标签。所有这些标签中的值都来自一个单数据库查询。我想运行此查询一次,以便填充主数据库和子数据库中的标签。有办法吗 这是我问题的最简化版本 下面是我如何在母版页的页面加载中初始化公共属性(我使用viewstate,以便其他方法也可以使用这些属性) 页面加载中的属性如下所示 public Meeting1 Meeting { set { ViewState["Meeting"] = value; } get {
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>
会议名称
我希望现在我的问题清楚了 否,您不能更改顺序,但有一种方法可以在子页面中指定强类型模型,或者您可以在子页面中执行强制转换以引用母版页的任何公共属性。否无法执行此操作。不过,顺便提一下,你的问题并不清楚。据我所知,您面临一些性能问题。我建议审查你的应用程序设计。运用接球等练习。下面的链接在我使用asp.net应用程序时很有帮助
您想要这样做的事实意味着您的设计中存在更深层次的问题。您应该尽量少用viewstate(如果有的话)。为什么需要在每个页面上运行一个查询?除了母版页的页面加载之外,还有许多函数使用这些属性。因此,我必须在属性中使用viewstate。第二,我在主页上快速跳转,在每一个新的选择上加载新的会议。因此,我需要运行query Meeting=bal.GetMeetingByID(MeetingID)[0]//在母版页的每次加载上进行DB查询这是一个。你问的是你心目中的解决方案,而不是描述问题。如果出于某种原因,您需要为每个页面加载查询,那么有更好的位置。您可以使用
global.asax
中的函数在每个请求的开头运行查询。或者,您可以将查询放在其他所有页面继承的基本页中,从而将查询放在生活方式的前面。如果我包含Meeting=bal.GetMeetingByID(MeetingID)[0]//在子页面的页面加载中使用DB查询,但该查询会被调用两次…您确定页面上没有图像标记、脚本标记或类似的东西,而您没有设置src属性,这会使页面多次尝试并呈现自身吗?img、脚本和我相信的链接标记将导致客户端再次请求页面用作其源,这将失败,但如果页面位于不清楚的位置,您可能不会注意到它失败。查询会被调用两次,一次在子页面,一次在母版页。因为我必须使用此查询在母版页中设置一些标签。我想问的是,有没有一种方法可以让我运行这个查询一次,母版页和子版页中的标签都得到值。当然可以。在母版页中创建属性,并始终从两个位置调用该属性。在属性get中,如果支持字段为null,则运行查询并将支持字段设置为结果。然后返回支持属性。
<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>