我的第一个asp.net webform网站增加对MVC支持的历程
2017-04-23 22:28
337 查看
中间百度,google了无数次,由于是业余时间弄,费了一周多的时间才搞定,不多说闲话,直接开始。
Controllers和Models你可以自定义到其他dll中去,Scripts和Content你也可以使用自己的目录结构存放。但是Views必须放在根目录下,并且Views目录中结构必须如下图所示(Shared目录和目录中的文件不能少,_ViewStart、Web.config文件也不能少,至于Home目录,是自己开发的,可以不必理会):
由于是第一次做,选最简单的,严格按照默认的MVC各种目录从其他项目中挪过来。
原有WebForm的Web.config中的节点不要随便动,将下面的config内容中各个节点添加到原有的Web.config文件中configSections节点增加:
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Linq"/>
<add namespace="System.Collections.Generic"/>
</namespaces>
system.webServer节点下增加:
在App_Start文件夹底下增加RouteConfig.cs类,代码如下:
WebForm中有一个文件叫做全局应用程序类Global.asax,如果没有,就添加一个。在Golbal.asax的Application_Start事件中,添加以下代码:
rztong F:\rongzitong\rztong\Controllers\HomeController.cs经过百度,在stackoverflow找到答案,需要引用Microsoft.Charp.dll文件然后编译通过。运行网站是出现错误:
经过多方查找,找到解决 办法如下:打开packages.config,增加各种依赖项:
然后在pachages.config所在的项目中执行:update-package -reinstall对包进行还原然后上面的那个错误没有了。报了一个view文件夹下web.config中一个引用错误。解决后又提示
这样的错误。这是由于view文件夹下的文件是从其他项目拷贝过来的,有些文件没拷贝过来造成的。重新按提示进行拷贝,然后刷新,打开网站首页不是原来的index.aspx,而是路由设置中的home/index。这问题很清楚,是IIS网站设置的默认首页不起作用了。而是按照global.aspx中设置的路由来寻找的。这个怎么解决才能使其打开网站的首页仍然是原来的index.aspx呢。于是各种寻找解决办法。找到三种解决办法:方法1:在Global.asax文件中增加protected void Application_BeginRequest(object sender, EventArgs e){if (Context.Request.FilePath == "/") Context.RewritePath("Default.html");}方法2:新建一个路由DefaultController,并把它设置为默认路由,在Action中增加Redirect(Url.Content("~/Default.html"));方法三:在global.aspx增加新路由。
为WebForm项目添加引用
System.Web.Abstractions; System.Web.DynamicData; System.Web.Mvc; System.Web.Optimization; System.Web.Razor; System.Web.WebPages;
建立MVC项目结构
使用MVC最大的一个好处就是细分了网站层,所以MVC中约定俗成的几个目录一个都不能少。Controllers、Views、Models、Scripts、Content几个文件是必须按照MVC项目结构搬移过来。
Controllers和Models你可以自定义到其他dll中去,Scripts和Content你也可以使用自己的目录结构存放。但是Views必须放在根目录下,并且Views目录中结构必须如下图所示(Shared目录和目录中的文件不能少,_ViewStart、Web.config文件也不能少,至于Home目录,是自己开发的,可以不必理会):由于是第一次做,选最简单的,严格按照默认的MVC各种目录从其他项目中挪过来。
配置Web.config文件
原有WebForm的Web.config中的节点不要随便动,将下面的config内容中各个节点添加到原有的Web.config文件中configSections节点增加:<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> </sectionGroup>
appSettings节点增加:
<add key="webpages:Enabled" value="false"/>pages节点下增加:<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Linq"/>
<add namespace="System.Collections.Generic"/>
</namespaces>
system.webServer节点下增加:
<modules runAllManagedModulesForAllRequests="true"/>
注册路由
在App_Start文件夹底下增加RouteConfig.cs类,代码如下:RouteConfig.RegisterRoutes(RouteTable.Routes);编译时出现:缺少编译器要求的成员“Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create”
rztong F:\rongzitong\rztong\Controllers\HomeController.cs经过百度,在stackoverflow找到答案,需要引用Microsoft.Charp.dll文件然后编译通过。运行网站是出现错误:
未能加载文件或程序集“System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件
经过多方查找,找到解决 办法如下:打开packages.config,增加各种依赖项:
未找到分部视图
这样的错误。这是由于view文件夹下的文件是从其他项目拷贝过来的,有些文件没拷贝过来造成的。重新按提示进行拷贝,然后刷新,打开网站首页不是原来的index.aspx,而是路由设置中的home/index。这问题很清楚,是IIS网站设置的默认首页不起作用了。而是按照global.aspx中设置的路由来寻找的。这个怎么解决才能使其打开网站的首页仍然是原来的index.aspx呢。于是各种寻找解决办法。找到三种解决办法:方法1:在Global.asax文件中增加protected void Application_BeginRequest(object sender, EventArgs e){if (Context.Request.FilePath == "/") Context.RewritePath("Default.html");}方法2:新建一个路由DefaultController,并把它设置为默认路由,在Action中增加Redirect(Url.Content("~/Default.html"));方法三:在global.aspx增加新路由。//路由到默认的webform首页/index.aspx routes.MapPageRoute("default_page", "", "~/index.aspx");这三个方法自然是选第三个了。上边两个方法有点违和,不是用路由设置规则来实现的。由于我的路由设置规则是在RouteConfig.cs类中放的,因此上边的新路由规则也放到routeconfig.cs中。并且由于mvc的路由规则是自上而下寻找,找到第一个匹配便不在往下寻找,因此这个路由应该放到设置的
//MVC路由注册 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );路由上边。因此放好后编译执行,没问题了,打入域名,定位到了首页index.aspx。而且也不影响使用/home/index访问mvc相关页面。
相关文章推荐
- 【.NET特供-第三季】ASP.NET MVC系列:传统WebForm网站和MVC网站运行机制对比
- 给网站增加解压缩功能,解决上传速度慢或者不支持FTP的问题(要求支持asp.net和SharpZip)
- Asp.net MVC 2 网站轻松实现多语言支持
- ASP.NET WebForm中要增加MVC特性?
- (再次恢复)aspspider.net又把我的网站删除了,谁能介绍个免费的支持asp.net的空间呢?谢谢了
- 让 ASP.NET MVC 支持 HotSwap
- 让 ASP.NET MVC 支持 HotSwap
- 第一个用ASP.NET做的网站---图书管理系统
- 让 ASP.NET MVC 支持 HotSwap
- 让 ASP.NET MVC 支持 HotSwap
- 让 ASP.NET MVC 支持 HotSwap
- 让 ASP.NET MVC 支持 HotSwap
- 让你的ASP.NET虚拟主机也支持子网站
- 让你的ASP.NET虚拟主机也支持子网站
- ASP.NET Atlas 为您期待已久的 AJAX 样式的网站提供支持
- ASP.NET弹出窗口技术之增加网站流量方法
- 让 ASP.NET MVC 支持 HotSwap
- 绑定Enum到ASP.NET数据绑定控件的完美解决方案[05/26修订]——增加支持第三方枚举描述,支持二进制与过的枚举值
- 让 ASP.NET MVC 支持 HotSwap
- 让 ASP.NET MVC 支持 HotSwap