温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

六、Asp.Net MVC4.0开发CMS系统案例之路由规则修改

发布时间:2020-07-09 19:13:04 来源:网络 阅读:1327 作者:sujerhy 栏目:编程语言

    今天开放的时候,发现如果我要把生成View视图页csthtml建立多个文件夹目录下面,contraller就找不到了。实际开发工作中,不可能所有生成的视图都放在View下面的一级文件夹下,对于系统的代码管理不是十分科学,于是我就尝试如何让它实现。

    比如登录功能,控制器建立的路径为:Contrallers/Sys/Com/UserContraller.cs.如图:


六、Asp.Net MVC4.0开发CMS系统案例之路由规则修改

    系统添加视图默认生成View的路径为:View/User/UserLogin.cshtml.如果我要把路径改为View/Sys/Com/UserLogin.cshtml,与Contraller的保持一直,就会报错系统找不到它。

六、Asp.Net MVC4.0开发CMS系统案例之路由规则修改

    系统默认的规则只会到view/user/里面搜索。这是因为路由设置了/view/{contraller}/{action}/id 规则,当文件被移走之后就找不到了。因此我们需要通知真正的位置在哪里。

六、Asp.Net MVC4.0开发CMS系统案例之路由规则修改

自定义路由规则,在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.

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI