2

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

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

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

            Response.Redirect(Pages.Default);

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

4

2 回答 2

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];
}

而不是到处都有随机的请求参数名称。

希望能给你一些想法。

于 2012-05-23T10:10:31.693 回答
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");

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

于 2012-05-23T12:29:57.347 回答