c# – ASP.NET Web Control在第一次回发后显示旧数据
我在ASP.NET表单应用程序中使用自定义Web控件时遇到了一个奇怪的问题.
对于Web应用程序,我认为它可以节省我很多时间来创建一个继承自CompositeControl的类,它将标签与一些其他控件(如TextBox或DropDownList)相结合.此复合控件具有几个属性,用于包装基础属性的属性(例如:EnteredText包装TextBox.Text).控件可以与常规控件一样用于数据绑定,但是使用compositeControl.EnteredText = someObject.someProperty而不是txtBox.Text = someObject.someProperty. Web控件的第一个版本是用C#编写的,效果很好.这些控件放在网站的App_Code文件夹中.但是,这个文件夹变得相当大,因为策略我必须用VB.NET编写所有内容,所以我决定创建一个类库来将VB.NET版本的控件放在那里,这样我就没有了将整个Web应用程序转换为VB.NET但仅转换为控件. 但是,VB.NET版本不起作用.当我单击GridView中的链接时,它会打开一个弹出窗口并正确填充所有文本框.关闭屏幕并单击同一网格中的其他链接时,框不会正确填充,并且框中会显示第一个回发的数据.使用调试器时,我看到所有框都填充了正确的数据,在渲染阶段,底层TextBox的Text属性显示所有新数据.它只是没有在屏幕上显示.回发后检索数据,例如按下保存按钮时,正常工作. 当我从同一页面上的App_Code文件夹中放置一个控件时,它按预期工作并显示新数据,而不是前一个回发中的数据. 这里有两个粘贴bin URL,第一个是工作C#版本,第二个是VB.NET版本. C#版本:http://pastebin.com/SuWaHrMt VB.NET版本:http://pastebin.com/9aeV7St1 以下是在ASCX文件中使用它的示例: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="CustomControl.ascx.cs" Inherits="Controls_CustomControl" %> <%@ Register Namespace="UI.CompositeControls" TagPrefix="cs" %> <cs:TextBoxWithLabel ID="TextBoxWithLabel1" runat="server" LabelText="Voornaam" /> <cc:LabeledTextBox ID="tbwlVoornaam" runat="server" LabelText="Voornaam" /> cc前缀在web.config中指定: <pages theme="Default" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"> <controls> <add assembly="CompositeControls" namespace="CompositeControls" tagPrefix="cc" /> </controls> <namespaces> <add namespace="CompositeControls" /> </namespaces> </pages> 我在这里缺少什么使C#版本工作而VB版本不工作? 提前致谢!如果您想要澄清一下,请随时提出问题. 更新: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="CustomControl.ascx.cs" EnableViewState="false" Inherits="Controls_CustomControl" %> 我的同事找到了以下代码段:
我只是不确定这是如何突然适用于控件的.基于this MSDN article on ViewState我猜测它发生是因为控件是在回发事件之后发生的CreateChildControls方法中添加的. 有人能解释一下究竟发生了什么吗? 解决方法
您在哪些浏览器中遇到此问题? 我最近在Firefox中遇到了类似的问题,只是通过禁用Firebug缓存解决了这个问题. (http://i.stack.imgur.com/bRRjb.jpg)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |