aspx:
<uc1:Pager ID="Pager1" runat="server" />aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{ UserControl uc = (UserControl)(Page.FindControl("Pager1"));
uc.VVV = "!!!!!!!!!!!"; }控件的ascx.cs
private string _v;
public string VVV
{
get
{
return _v;
}
set
{
_v = value;
}
}
执行页面后提示:
错误 1 “System.Web.UI.UserControl”不包含“VVV”的定义,并且找不到可接受类型为“System.Web.UI.UserControl”的第一个参数的扩展方法“VVV”(是否缺少 using 指令或程序集引用?)
但是<uc1:Pager VVV="123" ID="Pager1" runat="server" />这样写却能接收到参数
<uc1:Pager ID="Pager1" runat="server" />aspx.cs:
protected void Page_Load(object sender, EventArgs e)
{ UserControl uc = (UserControl)(Page.FindControl("Pager1"));
uc.VVV = "!!!!!!!!!!!"; }控件的ascx.cs
private string _v;
public string VVV
{
get
{
return _v;
}
set
{
_v = value;
}
}
执行页面后提示:
错误 1 “System.Web.UI.UserControl”不包含“VVV”的定义,并且找不到可接受类型为“System.Web.UI.UserControl”的第一个参数的扩展方法“VVV”(是否缺少 using 指令或程序集引用?)
但是<uc1:Pager VVV="123" ID="Pager1" runat="server" />这样写却能接收到参数
uc.VVV="1111111";
将用户控件强制转换到该接口就行了
我试了一下,是可以的。
其实以前我写过一篇文章
就是专门解决这类问题的 http://bbs.blueidea.com/thread-2775108-1-1.html以下是我的测试代码:
APP_Code/ucInterface.cs/* APP_Code/ucInterface.cs */
/// <summary>
/// Summary description for ucInterface
/// </summary>
public interface ucInterface
{
int id
{
get;
set;
}
}WebUserControl.ascx<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>
<asp:Label ID="Label1" runat="server" Text='<%# id %>'></asp:Label>WebUserControl.ascx.csusing System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class WebUserControl : System.Web.UI.UserControl, ucInterface
{
private int _id = 2;//有一个初始值2.
protected void Page_Load(object sender, EventArgs e)
{
Label1.DataBind();
}
public int id
{
get { return ViewState["__id"] == null ? this._id : (int)ViewState["__id"]; }
set
{
this._id = value;
ViewState["__id"] = value;
}
}
}default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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 id="div1" runat="server" />
</form>
</body>
</html>default.aspx.csusing System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Control c = Page.LoadControl("WebUserControl.ascx");
c.ID = "uc1";
div1.Controls.Add(c);
}
ucInterface uc1 = Page.FindControl("uc1") as ucInterface;//转化到app_code中的 ucInterface 接口
uc1.id = 234324324;//OK, 重新设置id的值(它的初始值我乱写的,是2)
//Page.DataBind();//不用再调用数据绑定也行。页面是显示:234324324而不是2,注释掉上面一句页面就会显示2了。说明我们成功的使用了usercontrol的中属性。
}
}