一个用户控件的问题,我要在页面中的page_load方法中设置页面中的用户控件的dropdownlist中的值但是

evaELLIS 2007-01-10 10:28:51
我要在页面中的page_load方法中设置页面中的用户控件的dropdownlist中的值但是告诉我未将对象引用设置到对象的实例。

因为是页面的load先执行,用户控件的load后执行,所以我了set属性,但是运行起来就告诉未将对象引用设置到对象的实例。
请问应该怎么解决!
谢谢
...全文
726 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
关注!帮顶!
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
但是我写了还是那个错误,想问问PM怎么办
  • 打赏
  • 举报
回复
至少要使用EnsureChildControls() --> 以你的那种写法至少要使用EnsureChildControls()

看到“this.list.selectindex = value;”就想到“如果子控件不存在又该怎办”。一个PM往往要求程序员对这种问题不需要再等着别人给你测试出问题,写程序的时候应该靠“感觉”就写出可行的代码。
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
第40行
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
这是ascs.cs中的错误
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:


行 38: {
行 39: this.EnsureChildControls();
行 40: this.ddlShipFreightType.SelectedIndex = value;
行 41: }
行 42: }

  • 打赏
  • 举报
回复
我表达了三个意思:

1. 应该自己调试,给出错误的堆栈信息、出错的变量的值和期望的值。如果只抛出一句错误名称让人猜出错位置,是不太方便的。

2. 至少要使用EnsureChildControls()。

3. 更好的设计是避免使用EnsureChildControls。但是这是在你明确了EnsureChildControls的功能基础上。
  • 打赏
  • 举报
回复
其实到现在我也看不出你到底在哪里遇到的“未将对象引用设置到对象实例”,你没有调试信息、没有说明到底哪个对象没有实例。

上面的“this.EnsureChildControls();”反映了一定问题,实际上不是很好的编程设计,但是是最容易理解的——操作控件之前要确保控件已经创建。

实际上在控件之中,不应该过渡使用this.EnsureChildControls(),否则会在其他某些属性改变时反复创建、删除、重建整个控件树。应该在Render的时候才创建子控件这才是比较好的设计,也就是说Type应该写到一个“private int _Type”上而不应该用控件来仅仅达到保存简单变量的目的。
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
那动态加载的内容,页面一刷新不就没了吗
  • 打赏
  • 举报
回复
b.ascx
public int Type
{
set
{
this.EnsureChildControls();
this.list.selectindex = value;
}
}


要是从提问题一开始就把调试信息帖明白一点就好了。
cpp2017 2007-01-10
  • 打赏
  • 举报
回复
动态加载
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
但是我现在要在aspx页面给ascs中的list传参,关间还是要是aspx中的page_load时就要传


各位高手有没有好的办法
cpp2017 2007-01-10
  • 打赏
  • 举报
回复
先声明如果可以让ascx的load事件在aspx的load事件前面先执行的话,我就不用建set了 ========= 可是可以,就是动态加载 MyControls m1 =(MyControls) this.LoadControl("MyControls.ascx"); m1.setDDL(); this.Panel1.Controls.Add(m1);
cpp2017 2007-01-10
  • 打赏
  • 举报
回复
还是这个listbox的问题。 在控件的Page_Load中调用绑定的方法,如果需要什么参数可传入
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
先声明如果可以让ascx的load事件在aspx的load事件前面先执行的话,我就不用建set了
vfan2010 2007-01-10
  • 打赏
  • 举报
回复
Log_Cargo1应该先获取到它吧。
leohuang 2007-01-10
  • 打赏
  • 举报
回复
这是cs文件,把aspx的html代码贴出来
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
就是这样的
evaELLIS 2007-01-10
  • 打赏
  • 举报
回复
a.aspx

page_load
{
Log_Cargo1.Type = Convert.ToInt32(Request.QueryString["Type"].ToString());

}

b.ascx
public int Type
{
set
{
this.list.selectindex = value;
}
}
cpp2017 2007-01-10
  • 打赏
  • 举报
回复
那就不是他的问题了。 把代码贴出来看看。
加载更多回复(14)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧