我有一个包含多个项目“组”的新解决方案。每个组包含一个云项目、一个 Web 角色项目和一个测试项目。所有 Web 角色项目都是 MVC4。
Web 角色之一是访问者的入口点。访问者将看到的部分内容应该来自解决方案中的其他 Web 角色。我无法让它工作,花了几个小时谷歌搜索后,我仍然无法解决它。也许任何人都可以在这个问题上提供帮助。
例如,我需要使用可以从其他 Web 角色之一获得的数据填充标题内容。我们称之为控制器HeaderController
。主项目 ( HomeController
) 中的控制器如下所示:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
//var headerController = new Generic.HeaderFooterContainer.Controllers.HeaderController();
//var foo = headerController.Index().ExecuteResult();
//ViewBag.Header = headerController.;
return View();
}
在评论中有一些我试图调试的东西。
这是主项目的页面布局。正文仍然是空的,因为这个问题只是关于可以从 ViewBag 或 ViewData 放置为 html 的页面标题,甚至可以使用自己的 @section。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
<meta name="viewport" content="width=device-width" />
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<div class="headerHolder">
<div class="innertube">
<div id="header">
@ViewBag.Header
</div>
</div>
</div>
<div class="contentHolder">
<div class="innertube">
<div id="content">
@RenderBody()
</div>
</div>
</div>
<div class="footerHolder">
<div class="innertube">
<div id="footer">
</div>
</div>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bms")
@RenderSection("scripts", required: false)
</body>
</html>
我面临的问题是我不知道应该如何进行这项工作。如何获取标题中的数据?我注意到的一些事情是:
- 如果我在其专用解决方案中运行 HeaderFooterContainer 项目,它可以正常工作(我可以获得 /Header 并在浏览器窗口中显示预期的响应)
- 如果我运行 Main 项目,我可以看到主页,但如果我要求 /Header,它可以找到控制器,但找不到视图。尽管它位于 HeaderFooterContainer 项目中,但它可能正在寻找主项目中的视图。