愛上(shang)MVC3系列~手動向路由表(biao)扔數據,不影響(xiang)當(dang)前URL路由配對(dui)
說在前:
在使用MVC3開發項目(mu)時,你(ni)為了SEO優化,所以(yi)肯定(ding)會自己(ji)去(qu)做URL的(de)重寫工作,而(er)(er)MVC提(ti)供了很這些功(gong)能,我們可以(yi)拿來就(jiu)用,進行(xing)(xing)優化之(zhi)后的(de)URL一般為//www.bobo.com/home/detail/166.shtml ,而(er)(er)這里的(de)166事(shi)實上(shang)是個參數,原來?后面(mian)的(de)被Request.QueryString收錄的(de)鍵值對,而(er)(er)在進行(xing)(xing)URL重寫后,URI沒有?這種參數了,而(er)(er)取(qu)而(er)(er)代(dai)之(zhi)的(de)是一個全新(xin)的(de)文件(jian)名,這當然(ran)有利(li)于被爬蟲找到了,呵呵 。
問題來:
一(yi)(yi)個(ge)問(wen)題(ti),當(dang)我(wo)們(men)為URL做路由之后,QueryString里當(dang)然是(shi)不可能(neng)再收錄你的(de)信(xin)息(xi)了,而信(xin)息(xi)包括control,action,及(ji)所有(you)參數(shu)都(dou)會存儲(chu)在RouteData里,而一(yi)(yi)般的(de)我(wo)們(men)知(zhi)道這(zhe)里的(de)信(xin)息(xi)是(shi)通過(guo)前一(yi)(yi)個(ge)頁面的(de)href傳遞過(guo)來(lai)的(de),這(zhe)是(shi)正常的(de),但如(ru)果前一(yi)(yi)個(ge)頁面不能(neng)傳過(guo)來(lai),或者說(shuo),我(wo)們(men)要(yao)求(qiu)的(de)信(xin)息(xi)只有(you)在本action里才能(neng)被確實,怎么辦呢?
寫在后:
這時,我們需要手動在action里向(xiang)RouteData里扔數(shu)據(ju)了,呵呵!
前網頁(ye)=》本網頁(ye)Action=>view渲染=》ViewPage頁(ye)面輸(shu)出
我們可以看到,我們手動寫RouteData的工作是在view渲染之前,在進行Action之后才執行的,所以,向RouteData里寫信息不會對當前URL地址有影響!
寫(xie)RouteData的操作(zuo)變(bian)得很容易了,看代碼(ma):
1 2 this.RouteData.Values.Add("ObjID", model.ObjID); 3 //扔到自己的路由(you)表(biao)中,并且(qie)不在當前(qian)URL地址欄上顯示,不破壞路由(you) 4 this.RouteData.Values.Add("TopicFlag", model.TopicFlag);
OK,我們將信息從數據庫里讀出來后,再扔到RouteData了,經常view渲染后輸出到頁面上,當然在頁面上如果用到了ObjID,可以直接
從Request對(dui)象里(li)讀(du)出來了!