這篇文章主要為大家展示了“ASP.NET MVC3如何實現(xiàn)仿Server.Transfer效果”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“ASP.NET MVC3如何實現(xiàn)仿Server.Transfer效果”這篇文章吧。
當我們在使用ASP.NET MVC實現(xiàn)頁面跳轉(zhuǎn)的時候,常用的應(yīng)該是:
Redirect
RedirectToAction
RedirectToRoute
或者在前臺使用腳本跳轉(zhuǎn)。
但這幾種跳轉(zhuǎn)方式都是基于Get請求的,在某些特定場景下可能并不適用。例如需要傳遞大數(shù)據(jù)量參數(shù)、或者復(fù)雜對象類型參數(shù)的場景,get方式肯定是有限制的。
在webform里面,有一種服務(wù)器端跳轉(zhuǎn)方式:Server.Transfer,相信大家一定都還記得。這種方式是中止當前頁面執(zhí)行,并將執(zhí)行流程轉(zhuǎn)入一個新的頁面,并使用上一個頁面創(chuàng)建的應(yīng)答流。這種方式具有如下的特點:
1,地址欄URL不會發(fā)生變化。
2,上一個頁面后臺產(chǎn)生的參數(shù)和對象可以直接傳遞到新的頁面。
3,減少客戶端對服務(wù)器的請求。
我們知道,ASP.NET MVC有一個核心思想,就是“約定勝于配置” ,例如在執(zhí)行完一個action后,會到view目錄下根據(jù)controller名稱查找對應(yīng)的view來進行渲染,但是 約定的做法并不意味著不能改變。
對于ASP.NET MVC而言,可以通過動態(tài)改變當前Action所渲染的view路徑,來實現(xiàn)類似的效果。
渲染非常規(guī)路徑的View
第一步,先實現(xiàn)一個自定義的ViewEngine:
public class ChangeViewEngine : System.Web.Mvc.RazorViewEngine { public ChangeViewEngine(string controllerPathName,string viewName) { this.ViewLocationFormats = new[] {"~/Views/" + controllerPathName + "/" + viewName + ".cshtml" }; } }
第二步,實現(xiàn)一個ActionAttribute
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] public class ChangeViewPathAttribute : ActionFilterAttribute { private string _controllerPath; private string _viewName; public ChangeViewPathAttribute(string controllerPath,string viewName) { this._controllerPath = controllerPath; this._viewName = viewName; } public override void OnResultExecuting(ResultExecutingContext filterContext) { //base.OnResultExecuting(filterContext); //ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new ChangeViewEngine(_controllerPath,_viewName)); } }
在該段代碼里面,ChangeViewPathAttribute類繼承于ActionFilter,并重寫其中的OnResultExecuting方法,將自定義的ViewEngine加入到全局ViewEngine集合里面來。
第三步,在需要渲染不同路徑的action加上Attribute
[HttpPost] [Filter.ChangeViewPath("Invoice","Create")] public ActionResult PreInvoice(string strIds,bool flag)
在做完以上步驟后,我們就可以隨意指定action所要渲染的view,在服務(wù)器端進行跳轉(zhuǎn),實現(xiàn)類似Server.Transfer的效果。 當然,以上只是一個簡單的示例,你完全可以做的更優(yōu)雅一點,實現(xiàn)更靈活的路徑配置。
以上是“ASP.NET MVC3如何實現(xiàn)仿Server.Transfer效果”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站題目:ASP.NETMVC3如何實現(xiàn)仿Server.Transfer效果-創(chuàng)新互聯(lián)
本文URL:http://www.chinadenli.net/article8/isdop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、ChatGPT、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)