【问题标题】:Getting the url of an aspx page using the page type使用页面类型获取 aspx 页面的 url
【发布时间】:2010-01-04 18:14:56
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 既然你已经知道页面名称,为什么还要为它写代码呢?您是否要强输入某些内容?
  • 我希望它是强类型的,以便可以轻松重构。

标签: webforms web-application-project


【解决方案1】:

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

【讨论】:

  • 是的,除非扩展方法要求您拥有它们扩展的类的实例。
【解决方案2】:

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

因此您的调用如下所示:

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

如果您不喜欢该语法,也可以使用其他方式。

【讨论】:

  • (附带说明,这也应该有效:TrafficCop[TypeOf(Users.UserList)].URL
【解决方案3】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    相关资源
    最近更新 更多