您好,登錄后才能下訂單哦!
今天開放的時候,發現如果我要把生成View視圖頁csthtml建立多個文件夾目錄下面,contraller就找不到了。實際開發工作中,不可能所有生成的視圖都放在View下面的一級文件夾下,對于系統的代碼管理不是十分科學,于是我就嘗試如何讓它實現。
比如登錄功能,控制器建立的路徑為:Contrallers/Sys/Com/UserContraller.cs.如圖:
系統添加視圖默認生成View的路徑為:View/User/UserLogin.cshtml.如果我要把路徑改為View/Sys/Com/UserLogin.cshtml,與Contraller的保持一直,就會報錯系統找不到它。
系統默認的規則只會到view/user/里面搜索。這是因為路由設置了/view/{contraller}/{action}/id 規則,當文件被移走之后就找不到了。因此我們需要通知真正的位置在哪里。
自定義路由規則,在App_Start文件夾下新建一個類MyRoute.繼承自RazorViewEngine 對選擇視圖方法FindView進行重寫。編寫代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Hillstone.App_Start { public sealed class MyRoute : RazorViewEngine { /// <summary> /// 自定義路由規則 /// </summary> public MyRoute() { ViewLocationFormats = new[] { "~/Views/{1}/{0}.cshtml", "~/Views/Shared/{0}.cshtml", "~/Views/Sys/Com/{1}/{0}.cshtml" }; } public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) { return base.FindView(controllerContext, viewName, masterName, useCache); } } }
讓將這個路由規則在Global中注冊,注冊方法如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using Hillstone.DAL; using Hillstone.App_Start; namespace Hillstone { // 注意: 有關啟用 IIS6 或 IIS7 經典模式的說明, // 請訪問 http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); RegisterView();//注冊視圖訪問規則 // System.Data.Entity.Database.SetInitializer<HillstoneContext>(new Initializer()); } protected void RegisterView() { ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new MyRoute()); } } }
運行OK.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。