关于两个自定义控件的取值问题及接口的应用
程序员文章站
2024-03-31 18:02:40
“一个.aspx的页面中,用到了两个用户控件,其中想做的到a控件有一个按钮,点击的时候获取到b控件中的一个textbox的值。 因为在生成的时候名字会改变,用findcon...
“一个.aspx的页面中,用到了两个用户控件,其中想做的到a控件有一个按钮,点击的时候获取到b控件中的一个textbox的值。
因为在生成的时候名字会改变,用findcontrol的时候名字该如何写呢?
另外像这种问题有几种解决的办法呢?”
论坛上看到这个问题,insus.net提供自己的解决方法,先看看解决运行的效果:
首先创建一个站点,然后创建两个用户控件,一个是uca,一个是ucb。 在ucb的控件上拉一个textbox。
<%@ control language="c#" autoeventwireup="true" codefile="ucb.ascx.cs" inherits="ucb" %>
<asp:textbox id="textbox1" runat="server"></asp:textbox>
创建一个接口igetvalue:
igetvalue.cs
using system;
using system.collections.generic;
using system.linq;
using system.web;
/// <summary>
/// summary description for igetvalue
/// </summary>
namespace insus.net
{
public interface igetvalue
{
string getvalue();
}
}
接下来,用户控件ucb实现这个接口,接口返回textbox的text值。
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using insus.net;
public partial class ucb : system.web.ui.usercontrol,igetvalue
{
protected void page_load(object sender, eventargs e)
{
}
public string getvalue()
{
return this.textbox1.text.trim();
}
}
创建一个aspx页面,如default.aspx,切换至设计模式,把两个用户控件uca,ucb拉至default.aspx:
<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" %>
<%@ register src="uca.ascx" tagname="uca" tagprefix="uc1" %>
<%@ register src="ucb.ascx" tagname="ucb" tagprefix="uc2" %>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<fieldset>
<legend>uca
</legend>
<uc1:uca id="uca1" runat="server" />
</fieldset>
<fieldset>
<legend>ucb
</legend>
<uc2:ucb id="ucb1" runat="server" />
</fieldset>
</form>
</body>
</html>
到这里,再创建一个接口interface,目的是为了获取ucb这个用户控件。
igetusercontrol.cs
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
/// <summary>
/// summary description for igetusercontrol
/// </summary>
namespace insus.net
{
public interface igetusercontrol
{
usercontrol getuc();
}
}
接口创建好之后,在default.aspx.cs实现这个igetusercontrol接口。
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using insus.net;
public partial class _default : system.web.ui.page,igetusercontrol
{
protected void page_load(object sender, eventargs e)
{
}
public usercontrol getuc()
{
return this.ucb1;
}
}
到最后,我们在uca这个用户控件的按钮click事件写:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using insus.net;
public partial class uca : system.web.ui.usercontrol
{
protected void page_load(object sender, eventargs e)
{
}
protected void button1_click(object sender, eventargs e)
{
igetusercontrol ucb = (igetusercontrol)this.page;
igetvalue value = (igetvalue)ucb.getuc();
response.write("<scr" + "ipt>alert('" + value.getvalue() + "')</scr" + "ipt>");
}
}
因为在生成的时候名字会改变,用findcontrol的时候名字该如何写呢?
另外像这种问题有几种解决的办法呢?”
论坛上看到这个问题,insus.net提供自己的解决方法,先看看解决运行的效果:
首先创建一个站点,然后创建两个用户控件,一个是uca,一个是ucb。 在ucb的控件上拉一个textbox。
复制代码 代码如下:
<%@ control language="c#" autoeventwireup="true" codefile="ucb.ascx.cs" inherits="ucb" %>
<asp:textbox id="textbox1" runat="server"></asp:textbox>
创建一个接口igetvalue:
复制代码 代码如下:
igetvalue.cs
using system;
using system.collections.generic;
using system.linq;
using system.web;
/// <summary>
/// summary description for igetvalue
/// </summary>
namespace insus.net
{
public interface igetvalue
{
string getvalue();
}
}
接下来,用户控件ucb实现这个接口,接口返回textbox的text值。
复制代码 代码如下:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using insus.net;
public partial class ucb : system.web.ui.usercontrol,igetvalue
{
protected void page_load(object sender, eventargs e)
{
}
public string getvalue()
{
return this.textbox1.text.trim();
}
}
创建一个aspx页面,如default.aspx,切换至设计模式,把两个用户控件uca,ucb拉至default.aspx:
复制代码 代码如下:
<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" %>
<%@ register src="uca.ascx" tagname="uca" tagprefix="uc1" %>
<%@ register src="ucb.ascx" tagname="ucb" tagprefix="uc2" %>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<fieldset>
<legend>uca
</legend>
<uc1:uca id="uca1" runat="server" />
</fieldset>
<fieldset>
<legend>ucb
</legend>
<uc2:ucb id="ucb1" runat="server" />
</fieldset>
</form>
</body>
</html>
到这里,再创建一个接口interface,目的是为了获取ucb这个用户控件。
复制代码 代码如下:
igetusercontrol.cs
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
/// <summary>
/// summary description for igetusercontrol
/// </summary>
namespace insus.net
{
public interface igetusercontrol
{
usercontrol getuc();
}
}
接口创建好之后,在default.aspx.cs实现这个igetusercontrol接口。
复制代码 代码如下:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using insus.net;
public partial class _default : system.web.ui.page,igetusercontrol
{
protected void page_load(object sender, eventargs e)
{
}
public usercontrol getuc()
{
return this.ucb1;
}
}
到最后,我们在uca这个用户控件的按钮click事件写:
复制代码 代码如下:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
using insus.net;
public partial class uca : system.web.ui.usercontrol
{
protected void page_load(object sender, eventargs e)
{
}
protected void button1_click(object sender, eventargs e)
{
igetusercontrol ucb = (igetusercontrol)this.page;
igetvalue value = (igetvalue)ucb.getuc();
response.write("<scr" + "ipt>alert('" + value.getvalue() + "')</scr" + "ipt>");
}
}