管理ASP .NET应用程序中的页面路径

时间:2012-05-23 08:41:50

标签: asp.net

目前在我的网络应用程序中,我有很多这样的行:

            Response.Redirect("~/Default.aspx");

等。现在,我正在重新组织aspx页面结构,因为它非常扁平 - 一切都在一个文件夹中。所以我必须彻底搜索所有代码以修复aspx路径。所以我的问题是:有没有办法在ASP .NET中管理/组织网站页面结构 - 某种SiteMap,所以我有一个类似的代码:

            Response.Redirect(Pages.Default);

这样我的代码将被关闭以进行某些aspx页面在文件夹之间移动的修改?

2 个答案:

答案 0 :(得分:0)

我认为没有任何自动解决方案,你可能最终会自己构建一些东西。您可能想查看Asp.Net Sitemap的内容,尽管它主要关注导航控件。

http://msdn.microsoft.com/en-us/library/yy2ykkab.aspx

我遇到了你在一些项目上遇到的同样问题。一个简单的解决方案是创建常量/静态/枚举来表示页面名称/ URL:

public static class SiteMap {
    public static readonly string Default = "/default.aspx";
}

当然可以让你做到

Response.Redirect(SiteMap.Default);

但是当页面传递所需的参数时,这种情况很快就会过时,并且迟早会遇到与参数名称完全相同的问题。所以我们通过添加像

这样的Url工厂类扩展了这个想法
public static class SiteMap {
    public static readonly string Article = "/blog/article.aspx";
}

public static class PageParams {
    public static readonly string ArticleId = "aid";
}

public static class UrlFactory {
    public static string GetUrlBlogArticle(int articleId){
        return string.Format("/{0}?{1}={2}",SiteMap.Article, PageParams.ArticleId, articleId.ToString());
    }
}

该方法确保所有链接以相同的方式工作并包含相同的参数。通过设置PageParams常量类,登陆页面/控件代码也更清晰,因为你可以做到

public void method(){
    var articleId = Request[PageParams.ArticleId];
}

而不是随处可见随机请求参数名称。

希望能给你一些想法。

答案 1 :(得分:0)

我写了一个可以帮助你的开源项目http://navigation.codeplex.com/

您可以在配置文件中列出您的页面和转换。这是一个例子:

<state key="Page1" page="~/Page1.aspx">
    <transition key="Next" to="Page2"/>
</state>
<state key="Page2" page="~/Page2.aspx"/>

然后在你的代码中你可以像这样从Page1.aspx移到Page2.aspx:

StateController.Navigate("Next");

如果您有兴趣或需要任何帮助,请告诉我。