您的位置:首页 > 编程语言 > ASP

我的第一个asp.net webform网站增加对MVC支持的历程

2017-04-23 22:28 337 查看
中间百度,google了无数次,由于是业余时间弄,费了一周多的时间才搞定,不多说闲话,直接开始。


为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类,代码如下:
WebForm中有一个文件叫做全局应用程序类Global.asax,如果没有,就添加一个。在Golbal.asax的Application_Start事件中,添加以下代码:
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,增加各种依赖项:
然后在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首页/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相关页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: