在Web窗体应用程序中包含MVC 3视图
我正在使用MVC3和Razor开发一个相当大的Web应用程序的新区域,其中应用程序的其余部分是基于ASP.NET 4 Web窗体的。我可以在此应用程序中包含我的MVC组件,以及我需要做些什么来实现此目的?在Web窗体应用程序中包含MVC 3视图
http://www.packtpub.com/article/mixing-asp.net-webforms-and-asp.net-mvc
这应该让你在正确的道路上。如果是我个人,但我会添加一个新项目到您的解决方案是MVC,然后您可以在IIS/MVCApp中配置一个虚拟目录
我们的经验是WebForms和MVC可以很好地兼容在同一个应用程序中,但没有混合。换句话说,每个页面可以是WebForms或MVC,但不能很容易地包含两者的元素。我发现两个主要的变通办法是:
- 让你的所有MVC元素大量Ajax化,使他们可以动态地通过AJAX页面加载后加载。
- 为了使应用程序的MVC部分具有与WebForms部分相同的外观和风格,您的主页面有两个版本,以及其他任何与您的Web应用程序“通用”的版本。
我们使用后一种方法。
我想我也会使用两种主文件方法。我担心不得不在我的aspx母版页上使用IFrame来托管我的mvc'内容页面'。 – ProfK 2010-12-15 17:46:19
@ProfK:是的,我们使用iframe解决方案将我们的应用程序整合到用Java编写的另一个应用程序中,并且这种方法存在更多的痛点。 – StriplingWarrior 2010-12-15 20:33:14
我正在使用类似这样的类将MVC视图嵌入到webforms页面中。会尝试这样做,在反方向
public class HelperFactory
{
private class FakeController : Controller
{
}
private class FakeView : IView
{
public void Render(ViewContext viewContext, TextWriter writer)
{
throw new NotImplementedException();
}
}
public static HtmlHelper<TModel> GetHelper<TModel>()
{
//HttpContextBase context = new HttpContext(HttpContext.Current);
FakeController controllerBase = new FakeController();
RouteData rd = new RouteData();
rd.Values.Add("controller", "Fake");
RequestContext requestContext = new RequestContext(new HttpContextWrapper(HttpContext.Current), rd);
ControllerContext fakeContext = new ControllerContext(requestContext, controllerBase);
ViewDataDictionary vdd = new ViewDataDictionary();
ViewContext viewCtx = new ViewContext(fakeContext, new FakeView(), vdd, new TempDataDictionary(), requestContext.HttpContext.Response.Output);
return new HtmlHelper<TModel>(viewCtx, new ViewPage());
}
}
你将如何配置,如果它被添加到解决方案的新项目只(即/ MVC)的根源在哪里?认为这将是有用的信息。 Andi G :) +1 – Andrew 2010-12-15 16:56:39
确保在计划路由时考虑虚拟目录URL(例如,'/ mvc'),因为它们相对于应用而不是虚拟目录解决。 – 2010-12-15 17:00:21