我想将MVC支持添加到现有的网站项目(而不是Web应用程序项目),并且有一些问题。
.csproj
文件的<ProjectTypeGuids>
节点。网站项目中没有csproj
个文件。 Models
中创建Controllers
和App_Code
文件夹。这是真的?我更喜欢在root下使用这些文件夹。Views
,我应该创建aspx
和aspx.cs
个文件吗?在这种设置中是否支持cshtml
razor文件?感谢任何其他回复。感谢
答案 0 :(得分:9)
使用asp.net MVC2及更高版本,MVC团队将核心功能分离为 三个不同的程序集,每个程序集都从常见的System.Web程序集扩展而来:
通过这个分离,他们继续进行并使程序集“在中等信任服务器环境中工作并且可以进行bin-deployable”。
这个特性的一个好处是,您不必具有运行MVC的特定项目类型。您只需要程序集,一些目录和一个经过调整的web.config。
为此,您只需将程序集放在项目的本地bin文件夹中,并为这些程序集进行必要的引用。 完成后,您可以访问asp.net MVC。
以下是Wrox Professional ASP.NET MVC 1.0一本有助于您入门的详细说明:
在现有Web表单应用程序中包含MVC
将ASP.NET MVC功能添加到现有Web窗体应用程序中有三个 不同的步骤:
1。添加对ASP.NET MVC所需的三个核心库的引用:System.Web.Mvc,System.Web.Routing和System.Web.Abstractions。
2。向应用程序添加两个目录:控制器和视图。
3。更新Web.config以在运行时加载三个程序集以及注册UrlRoutingModule HttpModule。
作为参考,这里有几个博客/网站,它们有一些更详细的场景可能会帮助你:
Running ASP.NET Webforms and ASP.NET MVC side by side
祝你好运,希望这会帮助你解决一些问题。答案 1 :(得分:8)
我已成功将一个ASP.NET MVC 3添加到Webforms项目中,以下是一些建议:
Controllers
添加为单独的类库项目,并从Web窗体Web项目添加对此项目的引用{E53F8FEA-EAE0-44A6-8774-FFD645390401}
添加到.csproj
文件没有帮助。 Views
文件夹添加到根目录Models
App_Code
System.Web.Razor
和System.Web.WebPages
个参考Web.config
答案 2 :(得分:0)
如果您将Global.asax文件放在网站的根目录中,我以前看过这项工作。您需要一种方法让您的项目识别并区分MVC请求与标准请求,如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("Default",
"{controller}.mvc/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
因此,您应用中的MVC网址可能如下:http://www.mywebsite.com/mycontroller.mvc/View/5
答案 3 :(得分:0)
我相信如果您设置一个新的MVC项目并将您的Web表单复制到新项目,它们将按预期呈现。
我没有对此进行过多尝试,但我过去曾因好奇而尝试过网页表单仍然可以正常使用。我想这取决于你的项目的复杂性,这种方法是否有效。
这将涉及更改您的项目类型。
答案 4 :(得分:0)
我的任务是更新(但遗憾的是没有重写)遗留的.Net 3.5,VB.NET(ughh)webforms,网站项目,我成功升级到4.0并添加了MVC3支持(带有单独的代码补充文件夹到支持C#,是啊!),它运行得很好。
@DotnetDude指令确实有效,但要注意几件事......
(1)添加Razor支持时,这是在Views / Web.config文件中完成的,而不是项目根目录中的web.config文件。
(2)如果您确实在Views目录的OUTSIDE中添加了Razor文件(.chtml或.vbhtml),vs.net将使用以下值更新您的根web.config
<appSettings>
<add key="webpages:Enabled" value="true" />
</appSettings>
不好。此设置允许直接浏览剃刀页面,在我的情况下设置为TRUE时,导致一切都中断。话虽这么说,我只在我的Views子文件夹中使用剃刀页面,但是我发现很好的是从我的.aspx页面调用AJAX调用到App_Code目录中定义的控制器,允许我现代化一个主要是所有回发的应用程序,和C#访问VB.NET编写的数据层。
答案 5 :(得分:-1)