ASP.NET MVC 3 仿 Server.Transfer 效果的实现方法主要涉及到的是在MVC框架下如何模拟Web Forms中的Server.Transfer功能。Server.Transfer方法允许在服务器端实现页面间的转移,而不会引发新的HTTP请求,这对于处理大量数据或复杂对象作为参数的情况尤为有用。然而,ASP.NET MVC 默认并不支持Server.Transfer,因为其核心设计理念是"约定优于配置",倾向于通过控制器(Controller)和视图(View)之间的明确关系来处理页面流转。 为了在ASP.NET MVC 3中实现类似的功能,我们可以采取以下步骤: 1. 创建自定义ViewEngine: 定义一个名为ChangeViewEngine的新类,继承自System.Web.Mvc.RazorViewEngine。在这个自定义引擎中,你可以覆盖ViewLocationFormats属性,以指定新的视图查找路径。例如,你可以将视图的路径设置为`~/Views/{controllerPath}/{viewName}.cshtml`。 ```csharp public class ChangeViewEngine : RazorViewEngine { public ChangeViewEngine(string controllerPathName, string viewName) { this.ViewLocationFormats = new[] { $"~/Views/{controllerPathName}/{viewName}.cshtml" }; } } ``` 2. 创建ActionFilterAttribute: 定义一个名为ChangeViewPathAttribute的特性类,继承自ActionFilterAttribute。在该类中,你需要重写OnResultExecuting方法,将自定义的ViewEngine添加到全局ViewEngine集合中。这将在结果执行之前发生,确保视图引擎使用指定的路径来查找视图。 ```csharp [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) { ViewEngines.Engines.Add(new ChangeViewEngine(_controllerPath, _viewName)); } } ``` 3. 应用ActionFilterAttribute: 在需要更改视图路径的Action方法上添加ChangeViewPathAttribute特性,传入控制器路径和视图名称。这样,当该Action被执行时,会使用自定义的视图引擎来查找并渲染指定的视图。 ```csharp [HttpPost] [ChangeViewPath("Invoice", "Create")] public ActionResult PreInvoice(string strIds, bool flag) ``` 通过这种方法,可以在不改变URL的情况下,实现在ASP.NET MVC 3中类似于Server.Transfer的效果。这种做法减少了客户端与服务器之间的交互,提高了性能,同时能够方便地传递复杂参数,适用于处理大数据量或复杂对象的场景。然而,需要注意的是,这种实现方式虽然实现了服务器端的页面转移,但并不会像Server.Transfer那样保留原始请求的状态,因此在某些特定情况下可能需要额外处理。






























- 粉丝: 1w+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


