0

我正在使用一个 Web 应用程序项目。

我的 web 根目录中有一个名为 Users 的文件夹,在该文件夹中我有一个名为 UserList.aspx 的页面

我想要做的是输入 Response.Redirect(Users.UserList.URL)

我认为我可以做的是创建一个扩展 Page 的类并添加一个名为 URL 的静态属性,该属性调用 MethodInfo.GetCurrentMethod().ReflectedType (我认为这还没有测试过),然后转换 Users.UserList -> ~/Users/UserList.aspx

我知道的这种方法的问题是我需要遍历每一页并使其扩展基类,并且它不适用于任何包含“-”字符的页面。

优点是,如果页面被移动,则没有任何断开的链接(当页面名称空间错误时,Resharper 会给出)。

此外,每个接受查询字符串参数的单独页面都可以有一个静态方法,这样如果我想添加/删除参数,我可以看到使用这些参数等的内容。另外,如果我想调用该页面,我不必检查参数的名称,例如 UserId userId、Id 或 id。所以这看起来像 Users.ViewUser.GetUrl(1) -> ~/Users/ViewUser.aspx?UserId=1

所以问题是:有没有更好的方法来做到这一点?还是原则上这是一个坏主意?

4

3 回答 3

0

MethodInfo.GetCurrentMethod().ReflectedType 不起作用,所以我想出了另一种使用泛型的方法。

而不是 Users.ViewUser.GetUrl() 或 Users.ViewUser.URL 它是 GetUrl() 对于带有参数的页面它仍然是 Users.ViewUser.GetUrl(1),它并不理想,因为它们应该具有相同的存在方式被称为但比我猜的字符串更好。

为了以防万一,我打算暂时搁置这个问题。

edidt:我想我实际上只会创建另一个名为 GetUrl(String getQuery) 的方法,因为如果我有两个相同类型的参数,它就不能很好地工作。

进一步编辑:我发现了如何做我想做的事。创建了一个名为 BasePage:Page 的类,其中 T : Page 是静态方法 redirect 和 geturl 每个页面从基本页面继承如下: MyPage:BasePage 任何页面都可以使用命令 MyPage.Redirect() 重定向到该页面;

于 2010-01-05T17:35:06.133 回答
0

有个更好的方法。创建一个了解路径的交通警察。然后,如果路径改变,你的数据模型改变或其他东西,你只需改变那个地方。另外,您可以从配置文件中读取并在运行时进行更改。

因此,您的电话如下所示:

Repose.Redirect(TrafficCop["Users.UserList"].URL)

或其他方式,如果你不喜欢语法。

于 2010-01-04T18:21:00.440 回答
0

您可以为执行您所想的基本 Page 类创建一个扩展方法。这将避免不得不返回并修改所有页面的基类。

于 2010-01-04T18:20:36.870 回答