我正在开发一个中等大小的ASP.NET webforms网站。内部链接等的URL通常使用如下语法设置:
<asp:HyperLink runat="server" NavigateUrl="~/Some/Path/MyPage.aspx" Text="Blah" />
这让我有些紧张,因为这些链接只是字符串而且我担心如果我重命名或移动一个我将无法追查所有引用的页面。
是否有一些ASP.NET-y方法来确定运行时的实际路径?我想象的是这样的事情:
NavigateUrl="<%= GetUrl(typeof(MyPage)) %>"
答案 0 :(得分:1)
您可以根据文件夹结构的逻辑定义方法GetUrl
。假设您的命名空间确实对应于您的文件夹结构,基本定义将如下所示
public string GetUrl(System.Type CurrentType)
{
List<string> PathInNamespace = CurrentType.FullName.Split('.').ToList<string>();
PathInNamespace.RemoveAt(0);
return "/" + string.Join("/", PathInNamespace.ToArray());
}
答案 1 :(得分:0)
你真正想要的是像Umbraco,Sitecore,OpenText等的CMS。
但是,您可以使用数据库和包含ID和Url列的表格自行解决问题。然后你可以这样做:
NavigateUrl="<%= GetUrl("AwesomeLink") %>"
它可以转到数据库,查找ID并填写准备好的链接。它还允许您在不重新编译的情况下更改链接。
这与你的想法类似,只是你仍然需要在某个时候告诉它你想要的链接。它无法猜到你。
答案 2 :(得分:0)
一个非代码解决方案是创建自定义错误页面以链接到您网站的其他部分或在所述错误页面中插入搜索框。它快速,简单,也有助于搜索引擎优化。