首页 新闻 搜索 专区 学院

.net用户控件获取不到用户控件中的控件 ,显示为null

0
悬赏园豆:50 [已解决问题] 解决于 2018-02-19 13:59

在项目中新建了一个用户控件,,

在前段定义了一个

<asp:Repeater ID="ReqBiaoqian" runat="server">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<li class="rnav1 "><a href="###"><%# DataBinder.Eval(Container.DataItem, "Nodes")%></a></li>
</ItemTemplate>
</asp:Repeater>

 

在后台我通过

public void DataISnotChace()
{
DataSql sql=new DataSql();
//循环标题
DataTable daReq = sql.GetTitle();
this.ReqBiaoqian.DataSource = daReq;
this.ReqBiaoqian.DataBind();

}

绑定数据

在其他页面 我通过

 public RightList rights;

if (!IsPostBack)
{
///绑定右侧数据栏 rights为控件

 rights = new RightList(false,true,true,true);
rights.DataISnotChace();
}

 

在调试过程中 ReqBiaoqian报错 ReqBiaoqian的值为null;求助各位。。。。。。。

具体图片地址:http://bbs.csdn.net/topics/392322818

 

RightList.ascx文件代码

/// <summary>
/// 是否启用缓存
/// </summary>
public static bool _ISchace ;
/// <summary>
/// 是否显示前十条评论
/// </summary>
public static bool _ISPinlun;
/// <summary>
/// 是否显示最新推荐
/// </summary>
public static bool _ISVisit;
/// <summary>
/// 是否显示最高点击
/// </summary>
public static bool _ISTopVis;

 

public RightList()
{
_ISPinlun = true;
_ISVisit = true;
_ISchace = true;
_ISTopVis = true;
}
/// <summary>
/// 初始判断是否启用 缓存,推荐,评论
/// </summary>
/// <param name="_ISchs">缓存</param>
/// <param name="_ISVis">推荐</param>
/// <param name="_ISPin">评论</param>
/// /// <param name="_ISTop">点击</param>
public RightList(bool _ISchs, bool _ISVis, bool _ISPin, bool _ISTop)
{
_ISPinlun = _ISPin;
_ISVisit = _ISVis;
_ISchace = _ISchs;
_ISTopVis = _ISTop;
}

protected void Page_Load(object sender, EventArgs e)
{

}

/// <summary>
/// 绑定数据
/// </summary>
public void DataLoad()
{
if (_ISchace)
DataISChace();
else
DataISnotChace();
}

/// <summary>
/// 未使用缓存时 绑定数据
/// </summary>
public void DataISnotChace()
{
DataSql sql=new DataSql();
//循环标题
DataTable daReq = sql.GetTitle();
this.ReqBiaoqian.DataSource = daReq;
this.ReqBiaoqian.DataBind();

// 循环推荐列
if (_ISVisit)
{
DataTable daTuijian = sql.GetTuiJian("");
if (daTuijian.Rows.Count <= 0)
{
this.H2Tuijian.Visible = false;
}
this.RepTuijian.DataSource = daTuijian;
this.RepTuijian.DataBind();
}
else
{
this.RepTuijian.Visible = false;
this.H2Tuijian.Visible = false;
}
//最新10条评论
if (_ISPinlun)
{
DataTable DaPinLunNew = sql.GetPinglun10("order by Cdate desc");
if (DaPinLunNew.Rows.Count <= 0)
{
this.NewPinl.Visible = false;
}
this.NewPinlun.DataSource = DaPinLunNew;
this.NewPinlun.DataBind();
}
else
{
this.NewPinl.Visible = false;
this.NewPinlun.Visible = false;
}
//最高点击
if (_ISTopVis)
{
DataTable daTopVis = sql.GetPaiHang10("");
if (daTopVis.Rows.Count <= 0)
{
this.H2Paihang.Visible = false;
}
this.ReqPaihang.DataSource = daTopVis;
this.ReqPaihang.DataBind();
}
else
{
H2Paihang.Visible = false;
ReqPaihang.Visible = false;
}



}

问题补充:

我在PersonalNewest.aspx这个页面 添加

<%@ Register TagPrefix="Url" TagName="Right" Src="~/Personal/RightList.ascx" %>

引用 用户控件同时在页面中添加

<Url:Right runat="server" ID="UrlRight" />

;之后在后天

public partial class PersonalNewest : System.Web.UI.Page
{

 public RightList rights;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
///绑定右侧数据栏
rights = new RightList();
rights.DataLoad();

}

}

}

 

在进入rights = new RightList();后初始化后并没有进入RightList的

protected void Page_Load(object sender, EventArgs e)
{}

之后就到了rights.DataLoad();方法,在这个方法中并没有获取到用户控件中的控件,显示为Null

即:

DataSql sql=new DataSql();
//循环标题
DataTable daReq = sql.GetTitle();
this.ReqBiaoqian.DataSource = daReq;
this.ReqBiaoqian.DataBind();

 

ReqBiaoqian是一个Repeater控件,,显示为nll

C#爆破的主页 C#爆破 | 初学一级 | 园豆:63
提问于:2018-02-17 23:50

建议提供一下 RightList.ascx.cs 的代码

dudu 2年前

@dudu: 那一部分??,,是绑定数据那一部分吗??

C#爆破 2年前

@dudu: 已添加修改,,,,

C#爆破 2年前

@C#爆破: DataLoad()是在哪里调用的?

dudu 2年前

@dudu: protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
///绑定右侧数据栏
//rights = new RightList(false,true,true,true);
//rights.DataLoad();}}

C#爆破 2年前

@dudu: 在另一个页面调用

C#爆破 2年前
< >
分享
最佳答案
0

这样new是不行的,试试下面的代码

var rightList = (RightList)LoadControl("RightList.ascx");
rightList.DataLoad();

注:RightList.ascx要使用实际的路径

收获园豆:50
dudu | 高人七级 |园豆:38801 | 2018-02-18 20:17

不是,,应该不是这个问题,,我照这么写之后,,调出后是个空的数据。。。

这个是一个用户控件,我将DataISChace();放在用户控件初始加载的时候也发现依旧是没有读取到用户控件中的控件的

public RightList()
{
_ISPinlun = true;
_ISVisit = true;
_ISchace = true;
_ISTopVis = true;

DataISChace();
}

C#爆破 | 园豆:63 (初学一级) | 2018-02-19 12:43

@C#爆破: 将构造函数中的代码移至 Page_Load 试试

dudu | 园豆:38801 (高人七级) | 2018-02-19 13:25

@dudu: 并没有进入 用户控件中的Page_Load。。在加载初始化之后完了。。。

C#爆破 | 园豆:63 (初学一级) | 2018-02-19 13:32

@C#爆破: 建议提供一下能重现这个问题的代码

dudu | 园豆:38801 (高人七级) | 2018-02-19 13:34

@dudu: 已添加问题补充:

C#爆破 | 园豆:63 (初学一级) | 2018-02-19 13:41

@C#爆破: 你补充的是ReqBiaoqian为null的问题,这个问题可以通过LoadControl来解决

dudu | 园豆:38801 (高人七级) | 2018-02-19 13:47

@dudu: 确实可以了,,多谢! 也能够进入Page_Load 了

C#爆破 | 园豆:63 (初学一级) | 2018-02-19 13:55
其他回答(1)
0

 你要 在 Default.aspx.designer.cs 中注册控件

就像这样:

 

public partial class Default {

/// <summary>
/// lbltype 控件。
/// </summary>
/// <remarks>
/// 自动生成的字段。
/// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。
/// </remarks>
protected global::System.Web.UI.WebControls.Literal lbltype;

/// <summary>

MantisShrimper | 园豆:162 (初学一级) | 2018-02-19 22:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册