C# 如果设置了MasterType,如何解决自动生成的Master属性的命名空间问题

C# 如果设置了MasterType,如何解决自动生成的Master属性的命名空间问题,c#,asp.net,master-pages,properties,C#,Asp.net,Master Pages,Properties,经过数周的讨论,我终于决定寻求以下问题的解决方案: 在.aspx页面中,您可以设置 <%@ MasterType VirtualPath="~/Mastername.master" %> 很好用。但是如果我在.aspx文件中做了更改,该属性将自动生成,如下所示: public new NAMESPACE1.Mastername Master { get { return ((NAMESPACE1.Mastername)(bas

经过数周的讨论,我终于决定寻求以下问题的解决方案:

在.aspx页面中,您可以设置

<%@ MasterType VirtualPath="~/Mastername.master" %>
很好用。但是如果我在.aspx文件中做了更改,该属性将自动生成,如下所示:

public new NAMESPACE1.Mastername Master {
            get {
                return ((NAMESPACE1.Mastername)(base.Master));
            }
        }
之后将无法编译,因为母版页的类无法在给定的命名空间中解析。 母版页具有名称空间1作为名称空间

每个contentpage都有相同的命名空间1。 autogenerated属性尝试在NAMESPACE1.NAMESPACE1中查找母版页类,该类将失败,因为它不存在。当然,我可以删除第一个名称空间1。使应用程序再次可编译,但几乎每次我在.aspx文件中进行更改时都这么做很糟糕

有没有办法避免这个问题?我能想到的唯一方法是忽略自动生成的属性,并在每次我想要访问母版页时进行显式转换


编辑:我使用的是Visual Studio 2008 Professional SP1。

出于某种原因,设计师认为母版页是在命名空间
NAMESPACE1
中定义的,因此请查看母版页定义(和代码隐藏)以检查其命名空间是否未被修改(可能是意外修改)

如果没有明显信息,可能需要在所有文件(*.cs,*.aspx,*.master,…)中搜索
NAMESPACE1


(这是使用VCS会有所帮助的地方,您可以查看更改的历史记录。)

我找到了一个有效的解决方案。我不会在designerfile中使用自动生成的属性。我将编写自己的包装器属性,并在每个contentpage中实现它。

实际上,它更像是一个设计器“功能”。-)


设计器文件中使用的主控名称将从.Master文件的Inherits属性中提取。因此,更改如何限定Inherits属性,这将更改创建设计器文件时使用的类名。

在源代码视图中将
添加到我的aspx页面时,我也遇到了同样的问题。由于某些原因,页面从未正确创建,并不断给我提供无效的名称空间错误,直到我实际更改为设计视图并调整控件大小,最后错误消失。它在某个地方使用了一些缓存数据(即使是构建/清理解决方案也没有清除),直到设计器重新创建页面,它才会生成该错误。

更改

<%@ MasterType VirtualPath="~/Mastername.master" %>



这将非常有效

此问题出现在多个不同的项目中。母版页的名称空间在这些项目中都没有改变。这一点都不令人满意。@citronas:很遗憾,没有。如果我的评论被认为有失身份,我道歉。这是为了表示同情。如果我找到了一个更干净的解决方案,我会在这里发布一个答案。顺便说一句,升级到VS2010后,我从来没有遇到过这个问题
<%@ MasterType VirtualPath="~/Mastername.master" %>
<%@ MasterType TypeName="Mastername" %>