在项目中有在Web层根目录建一个index.html的文件,
IDE调试就设定起始页为index.html。可以启动就是这个页面。
但是放到IIS中 就是无法设定默认页。其实就是希望在访问域名的时候 www.xxx.com 可以访问 index.html这个页面 。
设置路由,你只要创建默认的mvc项目,然后在iis发布成功,就直接有默认页了。
我觉得你的回答太坑了!我还得这样才有默认页!那还有意义吗?
@薛凯凯凯凯凯: 设置路由。路由是至上而下匹配的,只要有一个匹配成功了,那么就能继续往下了。借用楼下的路由配置:
routes.MapRoute( "Default", // 路由的名称(这个意义不大,随便写) "{controller}/{action}/{id}", // 带参数的匹配规则(这里描述了你的url的规则,如http://localhost:8080/Home/Index,那么第一个/之后是controller,第二个/后是action,再看http://localhost:8080,这个时候没有controller和action,想想Framework4.0方法的默认参数,没有的时候采用你下面设置的默认值) new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 默认参数,即当不输入时间
其实我看你的问题,更多的是发布到iis发布错误了,这个和webForms的发布稍微有点不同。
@幻天芒: 按你这样说我要访问这个页面 http://localhost:8080/index.html 还没有匹配的路由呢!这个页面实际上已经脱离路由了。我在访问这个页面的时候 我的路由配置根本没有这个路由配置。但是我还是可以访问的。我还是觉得可以不通过路由就能访问,不在规则中的页面。你觉得呢?
@薛凯凯凯凯凯: 静态页面不走路由...
楼上说的对,MVC 的默认页是在路由中设置的。
还是拿出证据来说明 才有说服力
楼上说的对
还是拿出证据来说明 才有说服力
@薛凯凯凯凯凯:
routes.MapRoute( "Default", // 路由的名称 "{controller}/{action}/{id}", // 带参数的匹配规则 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 默认参数,即当不输入时间的处理方法 );
MVC的默认页,其实是默认路由设置启动哪一个Controller的哪一个Action,在根目录的Global.asax.cs里面设置。是MVC项目里面的路由。
@阿军 - 逆心: 有没有官方的解释?
@薛凯凯凯凯凯: 木有喔
如果你在项目中使用到域Area的话,需要在路由里面将这个域的命名空间添加进去。至于说MVC 的默认页是在路由中设置的的官方解释,你自己用MVC2建一个项目测试(MVC2建项目时会默认生成一个,这时直接运行就行了,MVC3中新建项目的时候没有)看看就知道了,这就是最好的解释。
你的意思是说 M2 是可以有默认页的 到了M3就 改掉了 是吗?
这个问题跟原理有关,mvc的项目是采用razor路由,跟以前的web form运行机制有着根本的不同,所以你说的这种情况根本就不可能实现,即使能实现,也是歪门邪道去间接实现.
你得问问自己,为什么会有这种需求.如果仅仅是想显示index.html页的内容,那么你可以修改一下mvc模式下默认的首页,如Home控制器下的Index.cstml即可
那请问下MVC模式下如何默认首页~
这个问题正是我想知道的
我的首页是不在Views文件夹里面的。就在Web项目根目录下。如何让应用程序启动就访问这个文件呢?
不要通过Home控制器再重定向。
@薛凯凯凯凯凯: mvc的模式就是将iis请求转给控制器,控制器来决定哪个视图来展现,所以肯定要经过控制器的,
如果你非得把它放在外面,很麻烦,需要重写mvc的视图引擎,改变查找视图的路径,并且,改动后你还得将index.html改造成视图文件形式
我的意思是你把index.html页面内容覆盖掉View/Index.cshtml就行了
@大浪淘沙: 好的 你意思其实就是用Vidws/Home/Index.cshtml 这个文件是吧。其实我也知道用这个文件可以。我提问是想知道如何不用这个,一开始先不经过路由,访问控制器时再去走路由
@薛凯凯凯凯凯: 上面已经说了,原理,iis请求转给控制器,这块不是你控制得了的,这条路根本就不通,你就别还往南墙撞了
@大浪淘沙: 难道新版本的新特性也不行吗?One Asp.Net 糅合 Web Forms,MVC,Web API 在一个项目中。
@薛凯凯凯凯凯: 没接触过,不清楚