ASP.NET MVC 3仿Server.Transfer效果的實現方法_實用技巧

來源:互聯網
上載者:User

當我們在使用ASP.NET MVC實現頁面跳轉的時候,常用的應該是:

Redirect
RedirectToAction
RedirectToRoute
或者在前台使用指令碼跳轉。
但這幾種跳轉方式都是基於Get請求的,在某些特定情境下可能並不適用。例如需要傳遞大資料量參數、或者複雜物件型別參數的情境,get方式肯定是有限制的。

在webform裡面,有一種伺服器端跳轉方式:Server.Transfer,相信大家一定都還記得。這種方式是中止當前頁面執行,並將執行流程轉入一個新的頁面,並使用上一個頁面建立的應答流。 這種方式具有如下的特點:
1,地址欄URL不會發生變化。
2,上一個頁面後台產生的參數和對象可以直接傳遞到新的頁面。
3,減少用戶端對伺服器的請求。

我們知道,ASP.NET MVC有一個核心思想,就是“約定勝於配置” ,例如在執行完一個action後,會到view目錄下根據controller名稱尋找對應的view來進行渲染,但是 約定的做法並不意味著不能改變。

對於ASP.NET MVC而言,可以通過動態改變當前Action所渲染的view路徑,來實作類別似的效果。

渲染非常規路徑的View

第一步,先實現一個自訂的ViewEngine:

public class ChangeViewEngine : System.Web.Mvc.RazorViewEngine  {    public ChangeViewEngine(string controllerPathName,string viewName)    {      this.ViewLocationFormats = new[] {"~/Views/" + controllerPathName + "/" + viewName + ".cshtml" };          }  }

第二步,實現一個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,在伺服器端進行跳轉,實作類別似Server.Transfer的效果。 當然,以上只是一個簡單的樣本,你完全可以做的更優雅一點,實現更靈活的路徑配置。

以上就是本文的全部內容,希望對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.