将新控件添加到.aspx时Designer.cs不更新
本文关键字:aspx Designer cs 更新 添加 新控件 控件 | 更新日期: 2023-09-27 18:00:47
我在aspx文件中添加了一个新控件,并注意到该新控件不仅没有添加到设计器文件中,而且还缺少团队其他成员添加的许多其他控件。我尝试删除designer.cs文件并使用"转换为Web应用程序",但没有成功。我尝试过的其他一些事情是将aspx从项目中排除,构建,然后重新包含,但没有成功。我还手动将设计器中缺少的控件输入到设计器中。当我在这样做之后运行时,会出现一个错误,说控件没有定义,尽管它实际上是定义的,并且我应该检查我是否缺少指令。
我添加的第一个控件是从类似的控件复制粘贴,并进行了必要的更改。但是,我也尝试过手动创建具有相同结果的控件。
有什么想法吗?
试试这个
1.-将CodeBehind="Name.aspx.cs"
更改为CodeFile ="Name.aspx.cs"
2.-构建
3.-将CodeFile ="Name.aspx.cs"
更改为CodeBehind ="Name.aspx.cs"
我在工作中遇到过这个问题。
最可靠的方法是重新生成.designer.cs文件,下面是解决方案:
- 通过解决方案资源管理器找到损坏的aspx.designer.cs文件
- 仅从项目中删除designer.cs文件
- 右键单击主aspx文件,然后选择"转换为Web应用程序"
对我来说,解决方案是:
将页面置于设计视图中,然后右键单击/刷新。它将同步使用designer.cs打开控件。确保designer.cs关闭在此之前。
源
关闭Visual Studio,然后从C:'Windows'Microsoft.Net'Framework'Your_.Net_Version'ProjectName
中删除临时ASP.NET文件删除文件夹ProjectName
并重新启动Visual Studio。我不久前也遇到过类似的问题,这些行动解决了这个问题。
如果使用IIS,则可能需要停止服务器/站点才能删除临时文件。
替换VS 2013中的设计器文件:
- 删除旧的*.designer.cs文件
- 选择*.aspx文件
- 从项目顶部下拉栏中选择"转换为Web应用程序"
我在VS2012:中做到了这一点
- 打开页面.aspx designer.cs查找相同类型的控件(即LinkButton)
- 将其复制到文件末尾(在类花括号末尾之前)
- 重命名控件变量以匹配控件的名称
就是这样。
在我的情况下,我必须添加runat="server"
属性,然后才能重建解决方案。丢失的元素被自动添加到生成的aspx.designer.cs
中,并可用于代码
<button runat="server" id="Button01" type="button" class="Button" onclick="location.href='http://http://www.example.com/';">
<asp:Label runat="server" Text='<%# GetText("Button01")%>'></asp:Label>
</button>
如果您复制aspx和aspx.cs文件并重命名它们,但忽略了更新文件中的引用,那么一个简单/愚蠢的错误也会导致类似的症状。
我在试图查找tempasp.net目录时遇到了这个问题,但清除它没有帮助。然后我意识到,在我复制了文件以创建页面的新修改版本后,我没有更新CodeFile="Page.ascx.cs"
。然后我试图添加一个控件并在PageModified.ascx.cs
中引用它,但一直说它不存在。
当您的用户控件引用同一命名空间中的另一个用户控件时,似乎也会发生这种情况。如果您将引用的用户控件移动到不同的命名空间,问题就会消失。
有时html中可能会出现错误,比如两个控件具有相同的Id。还要小心div和span标记。这些会阻止设计器更新。对于所有这些,请检查"错误列表"中的警告并修复它们。你已经准备好出发了。这解决了我的问题。
我只能在代码隐藏文件中手动添加控制声明来解决这个问题。每次我尝试重新生成design.cs文件时,VS2013都会在没有丢失控件的情况下写入相同的行。
声明需要添加到代码隐藏中,而不是design.cs中,因为每次更改.aspx时都会删除它。
只需像对任何其他变量那样添加声明,如下所示:
protected MyNameSpace.MyControl ControlName;
只是添加到可能的解决方案列表中:我的标记文件中的这些行虽然看起来有效,但显然导致了与设计器文件的断开连接:
<%: Styles.Render("/my-file.css") %>
<%: Scripts.Render("/my-file.js") %>
我只是简单地把它们注释掉,保存下来,设计的文件就开始正常工作了。然后,我取消了这两行的注释,保存了它们,并能够在没有问题的情况下向页面添加新控件。我觉得这很奇怪,我仍然不清楚问题的最初原因是什么。我只能推测这是一个VisualStudio错误。
关键是,可能有完全有效的代码导致了问题,在这种情况下,一个可能的解决方案是在标记文件中对HTML部分进行注释,直到设计器文件自行解决,然后您可以撤消所有注释并恢复正常工作。
为了使用Visual Studio 2019从内联ASPX代码创建代码隐藏C#文件,我成功地完成了以下过程:
-
使用主菜单中的Project/AddClass创建具有相同基本名称和".CS"扩展名的CS文件。
-
将ASPX文件中的所有C#代码移到此新文件中。将以下代码添加到此新类:
命名空间<lt;您的命名空间>gt;{公共分部类<lt;your_class_name>gt;:System.Web.UI.Page{
-
添加/修改ASPX文件的第一行:
<%@页面语言=";C#";AutoEventWireup=";真";CodeBehind="<lt;your_class_name>gt;。aspx.cs";继承=";EVV.pages_sqlserver。<lt;your_class_name>gt"%>
-
使用主菜单中的Project/AddClass创建具有相同基本名称和扩展名".designer.CS"的CS文件。
-
复制任何其他.designer文件的内容。删除类的全部内容,只保留花括号。
-
打开基本ASPX文件的表单设计器。右键保留任何空白区域,然后选择"刷新"。有时,这就足够了。如果不是:
-
在解决方案资源管理器中,右键单击同一ASPX文件,然后选择"发布"。
-
有时,它只在关闭Visual Studio、删除所有临时文件并重新打开解决方案后才起作用。
**更新:在VisualStudio:16.6.3中,这似乎被打破了:它有时有效,有时无效。即使是全新的WebForms,Designer文件也没有更新。**
**更新2:这不可靠。我换了"重新签名者"(https://github.com/seanofw/Redesigner/tree/branches/net40)这就像一个符咒。
由于Telerik web控件中的错误,我的designer.vb代码文件没有更新-MasterTableView的DataKeyNames属性中的值不正确。aspx编辑器在设计时没有发现这一点,因为它只是一个字符串值,但它导致了designer.vb文件的自动生成失败。
我在VS2019中尝试了以上所有操作。
我删除了设计器文件,点击了项目菜单/转换为Web应用程序,重新生成了设计器文件。然而,它仍然无法自动重新生成。
工作原理-将文件从项目中排除,然后重新包含。
该文件现在保持自动重新生成。
在我的情况下;ID";ascx文件中控件的属性先设置为其他值,然后返回到所需值。这将导致ascx.designer.cs文件的刷新。在C#代码由于某种原因还没有为您的控制生成的情况下的简单技巧。。。
对我来说,解决方案是:
- 我删除了设计器文件
- 回收站并还原相同的文件
- 在visual studio解决方案资源管理器中,单击从顶部显示隐藏项目,并将相同的文件包含到ascx文件中
- 右键单击ascx页面,然后单击视图设计器。(可选)
- 在设计器上,右键单击并刷新并保存。(可选)
作为解决方案,右键单击aspx.cs页面并选择move。。。进入并选择
确保您的控件在页面的范围内。在我的案例中,它是在Repeater模板中。