【问题标题】:Multiple Web Projects in a Single Solution单个解决方案中的多个 Web 项目
【发布时间】:2015-07-08 18:22:00
【问题描述】:

我有一个包含两个 MVC Web 项目的解决方案。主项目(HomeController)按预期工作。当我点击操作时,他们会找到视图等。但是,当点击第二个项目控制器 (PortalController) 时,它永远不会找到视图,因为我认为它没有在第二个项目视图文件夹中查找。

如何让 MVC 在我正在点击的控制器项目的正确视图文件夹中查找?

在我的情况下,我需要它们是单独的 Web 项目,因为项目 2 是一个通用管理系统,我想在多个站点上使用,我只想将它复制到或引用 DLL。

我怎样才能做到这一点?

这是我的解决方案布局的屏幕截图

这是我得到的错误

这是控制器中 /Portal/Setup 操作的代码。我所做的只是在 Home/Index 上将 URL 更改为 /Portal/Setup,但它似乎没有找到相应的视图

    [HttpGet]
    public ActionResult Setup()
    {
        if (_portalService.GetModerators().Any())
            return RedirectToAction("Index");

        return View();
    }

【问题讨论】:

  • 你是否同时启动了这两个网络项目?
  • 两个项目都在同一个解决方案中,当我运行它时,我相信它正在找到第二个项目,因为最初它抱怨没有数据库连接字符串(在控制器中使用)。当我解决这个问题时,它现在无法找到视图。
  • 在解决方案资源管理器中右键单击解决方案并选择属性。您可以在该对话框中指定多个启动项目。
  • 您可能想研究AreasRazorGenerator 以将多个mvc 项目合并为一个

标签: c# asp.net-mvc


【解决方案1】:

您必须确保两个 Web 项目都在运行。要将其设置为调试时的默认行为,请右键单击您的解决方案 > 属性。选择左侧的启动项目。

这将为您提供选择启动项目或选择多个项目的选项。在您的情况下,您希望选择多个启动项目,每个网站。

【讨论】:

  • 我不知道这个选项谢谢,虽然它没有解决问题。当我现在运行解决方案时,它会自动在新选项卡中打开这两个网站。但是,当我尝试导航到第二个项目的 URL 时,它仍然无法找到视图
  • 您能否详细说明您的问题?页面名称是什么,代码是什么样的?
  • 我在问题中添加了两个屏幕截图。当单独运行“门户”项目时,当与我在同一解决方案中的其他项目结合使用时,则无法运行
  • 发布一些代码,显示您如何链接到其他网站
  • 我只是将浏览器中的 URL 更改为 localhost:49957/Portal/Setup
【解决方案2】:

您不能将两个 MVC 项目放在同一级别,作为替代方案,您可以将 Typhoeus.Portal.Web 注册为 MVC 区域,并调用 /[AreaName]/Portal/Setup 而不是调用 /Portal/设置。

要使 Typhoeus.Portal.Web 成为 MVC 区域,您可以添加 PortalAreasRegistration 继承自 AreasRegistration。

public class PortalAreasRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Portal";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Portal_default",
            "Portal/{controller}/{action}/{id}",
            new { controller = "Portal", action = "Index", id = UrlParameter.Optional }
        );
    }
}

在 Typhoeus.Personal.Web 中,添加 Typhoeus.Portal.Web 作为项目引用,并在 'Global.asax.cs' 的 Application_Start() 方法中将所有 MVC 区域注册到 AreaRegistration.RegisterAllAreas()

这样做后,您可以访问/Portal/Setup,在这种情况下/Portal/Portal/Step 以第一个Portal 作为区域名称,您可以在PortalAreasRegistration 中更改它。

【讨论】:

    【解决方案3】:

    我敢打赌,您需要将 Project(s)|Start Action 设置为指向应用的根 url,这样当您按下 F5 时,根始终会被加载。

    【讨论】:

      【解决方案4】:

      右键单击您的项目 -> 属性 -> 网络 -> 项目 URL 你可以找到你的第二个项目 URL 并使用它,但是在加载两个项目之后 用户:Dleh 回答了这部分

      【讨论】:

        猜你喜欢
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 2022-07-03
        相关资源
        最近更新 更多