在_Layout.cshtml
中是否可以确定要在@RenderBody()
中呈现哪些视图?
答案 0 :(得分:13)
您可以通过((RazorView)ViewContext.View).ViewPath
满足您需求的示例:
<script type="text/javascript" src="~/Content/Scripts/@(Path.GetFileNameWithoutExtension(Server.MapPath(((RazorView)ViewContext.View).ViewPath))).js"></script>
如果您需要实际的视图(例如 _Layout.cshtml ),则可以使用VirtualPath
代替。
旧答案 阅读您的评论,您想要添加
<script ...>...</script>
取决于视图但在@RenderBody()
之外?
然后把
@RenderSection("Scripts", required:false)
并在您的视图中定义类似
的部分@section Scripts {
<script ...>...</script>
}
因此,您不需要维护_Layout.cshtml,因为每个View都定义了自己的脚本。
以下是一个简单的解释:http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor
答案 1 :(得分:0)
可以做的是检查Html.ViewContext.RouteData.Values
。这是一个带有控制器,动作和id的字典(必要时)。
答案 2 :(得分:0)
阅读this文章,它将解决您的问题。
修改强>
RenderBody
什么是RenderBody?
在布局页面中,呈现内容页面中不是的部分 在命名部分内。 [MSDN]
RenderBody如何工作(图形演示)?
答案 3 :(得分:0)
@RenderBody()
呈现控制器控制的视图。所以,如果您的控制器是这样的。
public class HomeController : Controller
{
public ActionResult Index() // Renders File /Views/Home/Index.cshtml
{
return View();
}
}
然后public ActionResult Index()
Index.cshtml 将成为它将呈现在/ Views / Home文件夹中的视图。
您可以添加到 Index.cshtml 或 _Layout.cshtml 视图以呈现其他视图或 partialViews 添加@Html.Partial("_MyView")
,如下所示。
@Html.Partial("_LayoutHeaderHeader")
@Html.Partial("_LayoutHeaderNavbar")
有时可以轻松设置几个布局页面以从不同的视图调用。
如果要向您调用脚本查看,您应该始终创建一个_PartialView并将脚本放在局部视图中,并在视图底部调用该视图@Html.Partial("_MyView")
,脚本将正确设置。
这是一个很好的教程。 http://www.codeproject.com/Articles/698246/ASP-NET-MVC-Special-Views-Partial-View-and-Layout
答案 4 :(得分:0)
如果从基础模型派生所有模型,则可以向基础模型添加属性,该属性返回控制器名称,您可以使用
this.RouteData.Values["controller"].ToString();
如果你有一个BaseController
类会更好,因为你可以将它放在构造函数中,而不必再次触摸它。
由于您将基本模型的后代返回到具有控制器名称的索引页面,现在您可以在@Model.ControllerName
上使用一些方案库。如果您的控制器为多个视图提供服务,则可以更新该属性以指示某个视图名称。
除非您使用jquery,否则我认为您无法在索引中获取Partial的名称,并且此时已经加载了页面资源。
编辑:另一个技巧是创建自己的@ Html.Partial()HtmlHelper类。所以你有 @ Html.MyPartial(&#34; ViewName&#34;),并在该方法内部调用生成Html.Partial的内部函数,然后注入依赖项。
答案 5 :(得分:0)
编辑:我刚刚阅读了您对该问题的评论,并认为更好的方法是在另一个答案中使用@Matt提供的代码片段。
您可以在视图中使用 @section razor语句来通知应加载脚本。
布局模板占位符
@RenderSection("scripts", required: false)
查看代码
@section scripts {
<script src="~/Scripts/custom-imgedit.js"></script>
}
上面的示例告知custom-imgedit.js将加载到渲染部分占位符中。注意:您甚至可以使用@ Scripts.Render等捆绑包(&#34;〜/ bundles / myCustomScripts&#34;)