最近开始研究MVC框架,想要在项目中使用MVC,但遇到的第一个问题就是使用.NET的MVC首先要创建一个MVC的Web应用程序,基于目前我们项目组织结构,都是把个体项目编译后拷贝到一个总的WEB站点项目下,而新建的MVC项目仅仅是拷贝是无法正常运行的,耗费了一个下午时间总算搞通了。MVC代码想要在普通的WEB应用程序中使用需要配置以下几个地方。
1. 修改Global.asax。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
}
2. 添加以下几个节点内容 Web.config
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
</namespaces>
</pages>
<httpModules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
</system.web>
<compilation debug="true">
<assemblies>
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Routing"/>
</namespaces>
</pages>
<httpModules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
</system.web>
3. 在普通Web应用程序中引用 System.Web.Mvc.dll,并设置“复制本地”属性为True,如下图
4. csproj文件的修改(普通的融合不需要以下修改,这点是纯粹给自己做备忘用的)
代码
<!--正常的MVC项目会有以下节点-->
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>
<!--加入编译操作的节点,应该把“Condition="'$(MvcBuildViews)'=='true'"”移到AspNetCompiler标签下,否则无法正常编译或编译操作无法正常执行-->
<Target Name="AfterBuild">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" Condition="'$(MvcBuildViews)'=='true'" />
<Copy SourceFiles="@(Content)" DestinationFiles="@(Content->'..\BitAuto.Ucar.Transtar.Web\%(RelativeDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
<CreateItem Include="$(TargetDir)*.dll;$(TargetDir)*.pdb">
<Output ItemName="dllFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(dllFiles)" DestinationFolder="..\BitAuto.Ucar.Transtar.Web\bin" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>
<!--加入编译操作的节点,应该把“Condition="'$(MvcBuildViews)'=='true'"”移到AspNetCompiler标签下,否则无法正常编译或编译操作无法正常执行-->
<Target Name="AfterBuild">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" Condition="'$(MvcBuildViews)'=='true'" />
<Copy SourceFiles="@(Content)" DestinationFiles="@(Content->'..\BitAuto.Ucar.Transtar.Web\%(RelativeDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
<CreateItem Include="$(TargetDir)*.dll;$(TargetDir)*.pdb">
<Output ItemName="dllFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(dllFiles)" DestinationFolder="..\BitAuto.Ucar.Transtar.Web\bin" SkipUnchangedFiles="true" />
</Target>
5. .NET3.5和.NET4.0的MVC框架中,页面的C#代码标签不一样
<!--.NET3.5-->
<%= Html.TextBoxFor(m => m.UserName)%>
<!--.NET4.0-->
<%: Html.TextBoxFor(m => m.UserName)%>
<!--区别只在于一个是“=”号,一个是“:”号-->
<%= Html.TextBoxFor(m => m.UserName)%>
<!--.NET4.0-->
<%: Html.TextBoxFor(m => m.UserName)%>
<!--区别只在于一个是“=”号,一个是“:”号-->