词条统计
浏览次数:5053 次
编辑次数:8次 历史版本
最近更新:2013/6/20
创建者:掷鸡蛋者

本文原是论坛帖子,讨论在此处: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,应该算清楚明白。