2

请不要告诉我删除设计器文件并将页面转换为应用程序 - 我已经这样做了,但它没有用

我有一个用户控件,我以编程方式添加了 2 个 ASP 超链接控件。我无法让控件出现在设计器文件中。

我尝试将它们手动添加到设计器文件中,但它们在构建时被删除。

我已经搜索过 SO 并看到了有关删除设计器文件并将 ASCX 页面转换为应用程序的解决方案,但这没有奏效。

因此,在构建时,项目错误,因为它的代码找不到我的控件。

<asp:HyperLink ID="hplSiteLink2" NavigateUrl='<%# GetSiteLink(Eval("SiteName"))%>' runat="server">VIEW SITE INFO</asp:HyperLink>

        protected void GetSiteLink(object SiteName) 
    {
        string sn = string.Empty;

        if (SiteName is string)
        {
            sn = SiteName.ToString();

            if (sn == "redlionnewquay")
            {
                hplSiteLink.NavigateUrl = "http://www.redlionnewquay.co.uk";
                hplSiteLink2.NavigateUrl = "http://www.redlionnewquay.co.uk";
            }
            else
            {
                hplSiteLink.NavigateUrl = "~/Venue/Home/" + Eval("SiteNameUrl");
                hplSiteLink2.NavigateUrl = "~/Venue/Home/" + Eval("SiteNameUrl");
            }   
        }          
    }

如果您有任何想法,我将不胜感激。

4

2 回答 2

1

对,我想我已经解决了。我被这个主题的其他主题设置在正确的轨道上,说明如果您的代码中有任何错误,它将不会生成设计器文件。

考虑到这一点,我一遍又一遍地查看了该过程,并意识到我在 if 语句中运行了 Eval - 这是垃圾,所以我将代码更改为:

        public string GetSiteLink(object SiteName)
    {
        string sn = string.Empty;
        string sHtml = string.Empty;

        if (SiteName is string)
        {
            sn = SiteName.ToString();

            if (sn == "redlionnewquay")
            {
                sHtml = "http://www.redlionnewquay.co.uk";
            }
            else
            {
                sHtml = "~/Venue/Home/" + SiteName;
            }
        }
        return sHtml;
    }

解决了这个问题,虽然前面的代码编译没有错误并不明显,但我猜后面代码中的 Eval 是一个“软”错误。

谢谢你的帮助。

于 2012-04-05T13:56:06.883 回答
1

有时,如果您删除并重新添加控件,但设计器没有更新,这可能是由于权限问题 - 您确定所有文件都是可写的,并且您有权限吗?

您是否有任何其他正常工作的用户控件?我见过扩展(ascx)由于某种原因失去它的关联的情况,所以 VS 不知道如何正确处理它。如果您切换视图,这有什么不同吗?项目中是否有可能发生名称冲突?

最后,如果没有其他方法,请尝试从项目中删除用户控件,关闭 Visual Studio,然后重新打开解决方案并尝试添加新的解决方案。

于 2012-04-05T11:55:24.030 回答