我正在使用网络应用程序项目。
我的网络根目录中有一个名为Users的文件夹,在文件夹中我有一个名为UserList.aspx的页面
我想要做的是输入Response.Redirect(Users.UserList.URL)
我认为我可以做的是创建一个扩展Page的类,并添加一个名为URL的静态属性,该属性调用MethodInfo.GetCurrentMethod()。ReflectedType(我认为这个工作没有经过测试),然后转换用户。 UserList - > 〜/用户/ UserList.aspx
我所知道的这个方法的问题是我需要遍历每个页面并使其扩展基类的问题,并且它不适用于任何包含“ - ”字符的页面。
优点是,如果页面被移动,那么就没有任何损坏的链接(Resharper在存在具有错误命名空间的页面时发出)。
然后每个接受查询字符串参数的单个页面都可以有一个静态方法,这样如果我想添加/删除参数,我可以看到使用这些参数等的内容。 此外,如果我想调用该页面,我不必检查参数的名称,例如UserId userId,Id或id。所以看起来像Users.ViewUser.GetUrl(1) - > 〜/用户/ ViewUser.aspx?用户ID = 1
所以问题是:有更好的方法吗?或者这是一个坏主意吗?
答案 0 :(得分:0)
您可以为基本Page类创建一个扩展方法,它可以实现您的想法。这样可以避免返回并修改所有页面的基类。
答案 1 :(得分:0)
有一种更好的方法。创建一个知道路径的交通警察。然后,如果路径发生变化,您的数据模型会发生变化,或者您只需更改一个地方。另外,您可以从配置文件中读取并在运行时进行更改。
因此您的电话如下:
Repose.Redirect(TrafficCop["Users.UserList"].URL)
或者其他一些方式,如果你不喜欢这种语法。
答案 2 :(得分: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();
重定向到该页面