在将ASP.NET MVC页面添加到Web窗体项目时,如何获取“添加 - >视图”菜单项?

时间:2009-08-31 22:59:04

标签: asp.net-mvc visual-studio-2008 webforms

我正在向现有的ASP.NET Web Forms项目添加一些ASP.NET MVC页面。

我已经能够从我创建的MVC项目中移植一些模型,视图和控制器,并且它们工作得非常好。

但我想在我的项目中添加一些新的“强类型”视图,但我没有在我的Web窗体项目中获得新视图向导。

在定制Visual Studio方面,我有点新手,所以我可能会遗漏一些明显的东西。

5 个答案:

答案 0 :(得分:4)

你可以用项目文件做一些黑客攻击。在WebForms项目文件中(将其作为普通文件打开)在ProjectTypesGuid节点下添加以下guid

{603c0e0b-db56-11dc-be95-000d561079b0};

然后添加对System.Web.Routing,Abstractions和MVC的引用,你应该好好去...

基本上它与此程序相反......

http://weblogs.asp.net/leftslipper/archive/2009/01/20/opening-an-asp-net-mvc-project-without-having-asp-net-mvc-installed-the-project-type-is-not-supported-by-this-installation.aspx

答案 1 :(得分:1)

我刚刚在CodeProject博客上找到答案:

http://www.codeproject.com/KB/aspnet/webformmvcharmony.aspx?msg=3161863#heading0009

它涉及手动编辑.csproj文件并将guid添加到项目类型列表中。

答案 2 :(得分:1)

就像John Foster说你必须手动编辑.csproj文件一样。但是,我需要一个不同的guid和一些额外的元素(至少对于Visual Studio 2012),否则我在Add-> View之后得到一个错误对话框,说“参数不能为null。参数名称为path1”。这是我做的:

  1. 右键单击项目 - > “卸载项目”
  2. 右键单击项目 - > “编辑.csproj”
  3. 添加{E3E379DF-F4C6-4180-9B81-6769533ABE47};到Project \ PropertyGroup \ ProjectTypeGuids。我看起来像:

    < ProjectTypeGuids> {E3E379DF-F4C6-4180-9B81-6769533ABE47}; {349c5851-65df-11DA-9384-00065b846f21}; {fae04ec0-301f-11D3-bf4b-00c04f79efbc}< / ProjectTypeGuids>

  4. 确保Project \ PropertyGroup中存在以下元素:

    < MvcBuildViews&GT假LT; / MvcBuildViews>

    < FileUpgradeFlags>< / FileUpgradeFlags>

    < UpgradeBackupLocation>< / UpgradeBackupLocation>

    < TargetFrameworkProfile />

答案 3 :(得分:0)

新的View向导是ASP.Net MVC脚手架的一部分。您的项目需要从ASP.Net MVC项目模板创建才能获得此功能。

由于您将其添加到旧的ASP.Net项目(可能是使用Web应用程序或网站项目模板创建),因此您必须手动完成。

答案 4 :(得分:0)

当控制器方法的返回结果为 void 而非 ActionResult

时,我也看到过这种情况
   //Right click and the context menu will NOT show "Add View"
   public void Details(int id)
   {
      Dinner dinner = dinnerRepository.GetDinner(id);
      if (dinner == null)
         return View("NotFound");
      else
         return View("Details", dinner);
   }

   //Right click and the context menu will show "Add View"
   public ActionResult Details(int id)
   {
      Dinner dinner = dinnerRepository.GetDinner(id);
      if (dinner == null)
         return View("NotFound");
      else
         return View("Details", dinner);
   }