asp.net 2.0自定义控件查看状态问题

时间:2009-12-23 15:04:42

标签: .net asp.net postback

我有一个自定义控件,里面有一个RadioButtonList控件。在选择其中一个单选按钮时,控件会执行回发以执行某些服务器端工作,并在选择了正确的单选按钮的情况下重新加载页面。这在我的测试页面中工作正常。

我现在已将控件移动到其将要居住的网站上的页面中,并且当选择单选按钮时,会发生回发,但是当页面重新加载时,不再选择单选按钮。因此,选择不再保存到viewstate中。

我非常感激地收到关于我应该关注的新页面的哪些方面的任何指示。

干杯

Adendum - 更多信息

感谢Stephen的建议

该控件最初是使用设计器开发的Web用户控件,非常简单的实现,onload的服务器端处理程序以及radiobutton选择更改时。单独的dll代码后面和一个ascx。然后我将它转换为自定义控件,将ascx拉入到后面编译后的代码中。

我不在测试页面中动态创建控件,有一个标签和一个<%@ Register ... blah blah>在aspx的顶部做到这一点。 radiobuttonlist使用设计器在ascx中拖放,因此我没有实现代码来创建它。所以非常香草。 我正在寻找我应该在使用该控件的页面中看到的差异,找出它在测试页面中工作的原因,而不是在它需要驻留的网站页面中。

***********加入*********** 我有一个很短的时间来解决这个问题,不得不把它交给另一个开发人员。当我从他身上发现解决方案的时候我会在这里发布。 非常感谢大家的投入。

***********回答************* 以下是接管开发人员的答案。

您的测验控制很好,因为在回发时没有保留值的原因是因为当您将其置于实时时基类中的继承功能。本质上,它在页面加载方法中执行了一个DataBind,它在页面生命周期中是在回调meethods被调用之前,因此它重置了下拉列表的值。最后,我设置了一些viewstate属性,它们保存了下拉列表的值。所以这不是你可以知道的事情。

4 个答案:

答案 0 :(得分:2)

确保您的信息页

EnableViewState=True

答案 1 :(得分:2)

首先,这不是ViewState问题。 Viewstate用于对页面上的控件进行编程更改。如果您将标签的文本设置为与CODE BEHIND中ASPX上的文本不同,则该值将存储在viewstate中。 .NET有一种机制(它通过你的控件需要实现的接口来控制),它将POST数据解析回它所属的控件,这些控件在加载ViewState之后但在Page_Load事件触发之前发生。

现在,背后的原因有两种不同的可能性:

首先,您的自定义控件中的这个单选按钮是在CreateControls方法中生成的,还是您的控件正在渲染的直接HTML?如果它是直接HTML,那么您需要确保在回发时返回时处理预期值。如果它是一个服务器控件,在你的自定义控件中被声明为NEW而没有被实例化并在CreateControls方法中处理,那么你需要在那里进行处理。

其次是ASPX页面上的这个控件,或者它是否被添加到后面代码中的页面。如果它被添加到代码后面的页面中,很可能它是在.NET解析器完成分发回发数据之后添加的。检查您的表单集合以查看该值是否存在。

答案 2 :(得分:0)

上次我需要ViewState作为单选按钮时,我必须覆盖LoadViewState和SaveViewState方法才能使其正常工作。

答案 3 :(得分:0)

得到了接管该项目的开发人员的回复 - >

“您的测验控件很好,因为在回发时没有保留值的原因是因为当你把它放到基类时基类中的继承功能。基本上它在页面加载方法中做了一个DataBind,它在页面生命周期是在回发meethods被调用之前,所以它重置了下拉列表的值。最后我设置了一些viewstate属性,它们保存了下拉列表的值。所以这不是你可能知道的。“< / p>

希望这有助于某人。