Kri*_*ris 46 asp.net asp.net-mvc vs-web-site-project visual-studio
我在Visual Studio 2008 SP1中有一个遗留(哈哈) ASP.Net Webforms 网站项目,我想逐步介绍一些MVC功能.
我可以找到关于如何将ASP.Net MVC与WebForms集成的大部分信息似乎都假定使用Web应用程序项目.但是,似乎无法找到有关如何使用ASP.Net MVC功能改进现有ASP.net网站项目的信息.
我已经回顾了Scott Hanselman的帖子以及他即将出版的书中的第13章,这两本书都假设了Web Application Project类型.
这可能吗?有没有人有这方面的方法?
Kyl*_*eau 24
对于初学者来说,将MVC添加到webforms项目非常简单,要获得VS 2008 for MVC中的功能需要更多的工作(仍然很容易).首先,您要确保引用程序集并使用.Net 3.5.其次,您可以在当前的Web表单项目中创建一个controllers文件夹和views文件夹.您还可以使用索引操作创建一个简单的控制器.然后在global.ascx文件中设置/配置路由.你应该从那里开始.点击这里查看参考.
但是,您只能使用代码隐藏创建aspx页面(您可以删除它们并在标记中输入正确的继承类).实际上"转换"你的项目类型,以便你获得MVC和visual studio的好处(添加新的视图,转到控制器等)将需要一些游戏.我最好的建议是在VS 2008中创建一个新的MVC项目和一个新的Web App项目,并以纯文本格式比较.csproj文件.有一个长字符串值告诉VS项目模板.
相信我这确实有效.我之前在我自己的遗留项目上做过.我不记得除了试验/错误/消除之外我是如何找到项目类型"密钥"的. ASP.Net MVC在与webforms相同的项目中确实很好玩.
更新:我认为您可以更改为MVC项目类型,它仍然是一个Web应用程序,通过在.csproj文件的PropertyGroup中使用它们.将这些与您所拥有的相比较并更改不同的那些,请务必复制/备份该文件.
<ProjectGuid>{B99EC98A-1F09-4245-B00D-5AF985190AA9}</ProjectGuid>
<ProjectTypeGuids>{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
Run Code Online (Sandbox Code Playgroud)
更新2:您不会影响您的项目或影响它.如果你不容易,那就备份并玩游戏吧.如果您遇到更改,您将始终拥有备份.起初我很怀疑,但很高兴我走上了MVC之路.
Jas*_*son 19
我想我会使用Visual Studio 2010 SP1/NuGet/Scott Hanselman完全不支持的实用程序给出更新的答案.
这将为项目添加所有必要的dll,javascript文件,web.config设置更改等.如果一切顺利,您应该可以按F5,导航到您网站上的"home",并查看由mvc呈现的示例表单:"欢迎使用ASP.NET MVC,使用NuGet包以完全不受支持的方式升级汉塞尔曼!没有保修!"
对于WebSite项目,您只需要将控制器添加到App_Code,而不是根目录.你会错过一些VS善良 - 因为它不知道你在没有csproj文件的情况下使用MVC,但你实际上会让它工作.
只记得继承自Controller和ViewPage,你应该做得很好.
我有一个非常大的ASP.NET网站(不是Web应用程序),并希望将MVC3添加到它.我没有选择改变项目的类型,所以我不得不使用网站(asp.net 4.0).
我使用单独的MVC项目,但不是它自己的Web应用程序,而是作为我旧网站中的程序集.
这是我所做的事情的简要说明:
添加了路由到网站.我只是复制了我网站global.asax中MVC global.asax的一些代码.我们需要一些使用方法:
using System.Web.Mvc;
using System.Web.Routing;
Run Code Online (Sandbox Code Playgroud)在Application_Start中,我们需要:
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
Run Code Online (Sandbox Code Playgroud)
然后添加常用的路由方法:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// your routes
}
Run Code Online (Sandbox Code Playgroud)
接下来,在您的网站的web.config中添加一些内容.在编译中的system.web中,我们需要以下程序集:
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
Run Code Online (Sandbox Code Playgroud)
最初我还在web.config中添加了一些MVC命名空间,但没有它们似乎工作正常.
您现在可以在网站的Global.asax中创建新路由,然后在MVC项目中添加相应的控制器,然后返回到网站以为其添加视图.所以你的逻辑都在一个程序集中,而视图和路由在网站中定义.
您仍然可以通过在那里设置断点来调试MVC控制器,但是您可以通过启动网站进行调试.
如果您使用建议的MVC默认路由:
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
对www.mysite.com的调用将提供家庭控制器/视图的内容,而不是旧的default.aspx主页,所以我只是不使用这样的路由.如果与现有物理文件夹和文件路由冲突,请在路由上使用带有正则表达式的约束来排除此类冲突.
即使我在网站中使用母版页,公共页面部分的实际html也是由另一个程序集中的代码创建的.我可以从我的_ViewStart.cshtml或我的基本控制器调用相同的方法.
到目前为止,我还没有看到任何关于这种方法的真正否定.
| 归档时间: |
|
| 查看次数: |
17716 次 |
| 最近记录: |