使用编译时检查以符号方式引用其他ASP.NET页面?

时间:2009-12-09 23:38:55

标签: asp.net

我注意到在我的项目中累积的代码如下所示:

Response.Redirect("/Foo/Bar.aspx");

这看起来很脆弱 - 如果我移动或重命名Bar.aspx文件,我需要找到我引用它的地方并在标记和代码隐藏中更正这些字符串常量。看起来他们应该是一个更好的方式。类似的东西:

Response.Redirect( MyNamespace.BarPage.GetUrl() );

换句话说,让'stack'找出我需要的URL。注意:我知道我可以使用手工编码的BarPage.GetUrl()方法合并对特定页面的引用,但即使这样也很容易出错。

有没有更好的方法?

4 个答案:

答案 0 :(得分:2)

最好的方法是为他们提供资源。将有意义的密钥和URL值添加到资源文件中,然后重定向。

Response.Redirect(Properties.ASPXUrls.FooBar);

答案 1 :(得分:1)

你将面临的问题是除了<%@Page %>指令之外,代码隐藏与代码之外没有真正的内在联系。没有任何真正的原因,代码隐藏甚至必须具有与代码infront的文件名相同的类名,它只是因为它的约定而发生,而且它是自动生成器如何实现它。

这意味着您不会在编译时找到任何可以引用的内容,甚至不知道.cs链接到的aspx。你会发现最接近的是typeof(MyNamespace.BarPage).FullName它将为你提供代码隐藏的名称,并假设事情遵循惯例你可以(但我不建议)构建它与之关联的代码前面页面的URL

就我个人而言,当你重命名并进行一些重构时,我认为你最好只为"barPage.aspx"做一个查找。无论如何,你必须处理代码前面的超链接。如果barPage.aspx代表一些抽象概念(比如“登录页面”),它可能有助于为它添加属性,但如果barpage只是另一个没有真正全局固有意义的页面,我会保持原样。

答案 2 :(得分:0)

我建议为每个链接创建一个具有不同属性的静态类。这样,您只有一个地方可以更新。

答案 3 :(得分:0)

无论您如何获得下一页的名称,重定向通常都是脆弱的。它们也是性能问题。

如果您发现它们正在您的系统中收集,那么您应该首先提出的问题是:过度重定向几乎总是建筑问题的一个标志。