本文原是论坛帖子,讨论在此处:http://www.wojilu.com/Forum1/Topic/109
1、链接的正确做法
如何在web中使用链接,似乎是一个无须讨论的话题。比如在页面的 html 中这样写:
<a href="/Article/32.aspx">请点击我</a>
但这种将链接硬编码在html页面的做法,会有几个不方便的后果:
首先,如果你需要将所有链接的后缀名改成 .html,或者不使用后缀名,目的是让seo更加友好,那你怎么做?难道批量替换所有页面吗?
其次,如果Article控制器因为某种原因改了名称,从ArticleController变成了NewsController,你也得逐一到页面中修改链接。
正确的做法不是直接拼接字符串,而是:
在 html 中使用一个链接的变量,比如这样 <a href="#{articleLink}">请点击我</a>
然后,在这个 html视图对应的控制器中,设置链接 set( "articleLink", to( Show, 32 ) );
好处就是上面提到两个方面:
a)修改链接的后缀名更加方便,只要改一下mvc.config,全站的所有链接都会生效;
b)重构controller或action的名称不影响页面中的链接。
2、链接的几种形式
链接到站内网址,其实就是链接到某个 controller 的 action 方法,常用的有如下2种简单形式
to( action ) | 链接到某action方法(当前controller) |
to( action, id ) | 同上,但带上id |
注意,如果action不在当前控制器中,你还可以这样写: | |
to( new xxxController().action ) | 链接到某个xxx控制器的action方法 |
to( new xxxController().action, id ) | 同上,但带上id |
以上2种方法都是强类型的,在重构的时候会特别方便。
另外,还有一个 t2( actionName ) 方法,是用于明确不需要appId的场合,其他和to一样。
更加全面的链接方法是使用 Link 对象,它有更丰富的方法可用,不一定是强类型,还可以使用字符串,较常用的是
下面2种和上面的to性质一样 | |
Link.To( action ) | 链接到某action方法 |
Link.To( action, id ) | 同上,但带上id |
带上了IMember参数 | |
Link.To( member, action ) | 链接到某member的action中 |
Link.To( IMember member, String controller, String action, int id ) | 使用字符串,不使用强类型 |
直接链接到 IMember | |
Link.ToMember( IMember member ) | |
Link.ToUser( String friendUrl ) |
在“我记录综合系统”中,为了方便,专门为链接到IApp和IAppData的对象自定义了链接对象 alink
alink.ToAppData( appData ) | 链接到某个 IAppData 对象 |
alink.ToApp( IApp app, MvcContext ctx ) | 链接到某个 IApp |
这些看似不多的链接对象,完成了整个“我记录网站综合系统”的所有链接,基本上都是强类型的。正式有了这套链接系统,所以你才可以轻松的切换网站的后缀名。
3、翻页链接的形式
你不需要管理翻页的链接。因为 a)翻页数据wojilu orm直接替你打理了,b)翻页链接wojilu mvc也直接替你自动生成了
如果第一页是 Article/2, 那么第二页链接的形式就是 Article/2/p2,应该算清楚明白。