页面与用户控件的值传递
前言:
先抱怨几句,又上班两天,加班气氛渐浓!
今天项目中一问题:在用户控件中,需要获取表中ID字段,进而通过数据库操作,用GridView展现出来。然后将此用户控件被包含于页面中。问题是:怎么让页面加载时,其所获取的值(ex,通过QueryString),可以传达到用户控件,并且可以同时展现数据?
我的模糊点在于:
- 用户控件的淡忘;
- 对于用户控件和页面传值的不了解(特别是其都有Page_Load(),其顺序如何?);
解析:
经过查询资料,现在初步探索出利用自定义控件的“属性”附加方法,可以实现值的传递!具体见代码:
首先是WebUserControl的前台代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:TextBox ID="TextBox1" runat="server" Text ="yyy"></asp:TextBox>
<asp:Label ID="Label1"
runat="server" Text="Label"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" Text ="yyy"></asp:TextBox>
<asp:Label ID="Label1"
runat="server" Text="Label"></asp:Label>
其次是WebUserControl的后台代码(可见,附加属性):
public partial class WebUserControl : System.Web.UI.UserControl
{
//附加用户控件的属性
private string id;
public string Id
{
get { return id; }
set { id = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = this.Id;
}
}
{
//附加用户控件的属性
private string id;
public string Id
{
get { return id; }
set { id = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = this.Id;
}
}
后来是验证页面的前台代码(附:如何引用用户控件):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix ="uc1" TagName ="userControl1" Src ="~/WebUserControl.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<uc1:userControl1 ID="userControl11" runat="server" />
</form>
</body>
</html>
<%@ Register TagPrefix ="uc1" TagName ="userControl1" Src ="~/WebUserControl.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<uc1:userControl1 ID="userControl11" runat="server" />
</form>
</body>
</html>
最后是验证页面的后台代码:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// string id = Request.QueryString["id"].ToString();
string id = "Y001";
userControl11.Id = id;
}
}
{
protected void Page_Load(object sender, EventArgs e)
{
// string id = Request.QueryString["id"].ToString();
string id = "Y001";
userControl11.Id = id;
}
}
附:主旨
先给用户控件中TextBox赋初值为“yyy “,将用户控件包含进页面后,通过页面获取的值,进而传递至用户控件中,即TextBox值重赋为”Y001“;
由上可见,可以通过附加用户控件属性,实现获取值~
注:由分步调试,可以观察其Page_Load顺序是:先调用页面的Page_Load(),然后调用用户控件的Page_Load()。这样才保证在页面的Page_Load()中对用户控件属性赋值,然后在用户控件的Page_load()中将其属性值取出(此时即可将其使用,进而绑定上述的GridView问题了)。
综述之,用户控件由于使用较少,并未达到熟练程度,以后再加强,呵呵~