我正在动态地将用户控件加载到页面上。我通常是一个vb.net的人,通常可以通过,但这让我很难过。我正在尝试在加载之前将变量从页面传递给控件。
Heres是我称之为控件的地方:
Control webUserControl = (Control)Page.LoadControl("~/controls/carousel-guards.ascx");
phGuardsList.Controls.Add(webUserControl);
我已将以下属性放在carousel-guards.ascx:
上public String PostCode
{
get
{
return this.PostCode;
}
set
{
this.PostCode = value;
}
}
但我似乎没有可用的webUserControl.PostCode。
任何帮助都将非常感激
编辑 - 当然,我必须引用控件。傻我!但是,我不能让我用carousel_guards调用它:Error 96 The type or namespace name 'carousel_guards' could not be found (are you missing a using directive or an assembly reference?) C:\Development\Guards247\g247 Test\FindGuard.aspx.cs 197 13 g247 Test
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace g247_Test.controls
{
public partial class carousel_guards : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public String PostCode
{
get
{
return this.PostCode;
}
set
{
this.PostCode = value;
}
}
}
}
答案 0 :(得分:1)
您需要使用页面的班级名称才能工作。
var webUserControl = (carousel_guards)Page.LoadControl("~/controls/carousel-guards.ascx");
// now works
webUserControl.PostCode = "17673";
phGuardsList.Controls.Add(webUserControl);
如果你没有包含控件的引用而没有找到你可以在aspx上插入的类的名称
<%@ Reference Control="~/controls/carousel-guards.ascx" %>
或者只是将其拖放到页面内,进行引用,然后删除实际控件,因为它使其动态化。
答案 1 :(得分:0)
您无法从控件访问该属性,因为您正在将加载的控件转换为Control
。您应该将其强制转换为您的控件类型。如果您的Control类名称为CarouselGuards
,那么您可以执行以下操作:
CarouselGuards webUserControl = (CarouselGuards)Page.LoadControl("~/controls/carousel-guards.ascx");
然后您可以访问该属性。
webUserControl.PostCode = "123";
答案 2 :(得分:0)
使用转换为您的控件类型CarouselGuards
而不是Control
CarouselGuards webUserControl = (CarouselGuards)Page.LoadControl("~/controls/carousel-guards.ascx");
webUserControl.PostCode = "XXXX";
作为旁注,不要忘记对象的检查空控制。