使用Razor的ASP.NET MVC部分渲染问题

时间:2010-10-29 12:14:58

标签: asp.net-mvc asp.net-mvc-2 razor

我为我的mvc应用程序定义了 _Layout.cshtml ,如下所示:

@inherits System.Web.Mvc.WebViewPage
@using Webdiyer.WebControls.Mvc;

<html xmlns="http://www.w3.org/1999/xhtml">
<head>   
    @RenderSection("HeaderContent", false)
</head>

<body> 
    @RenderBody() 
</body>
</html>

SomePage.cshtml 页面上,我已经包含了布局,还包含了部分渲染构造,因为我想在此处渲染 _MailForm.cshtml 页:

@{
   View.Title = "page";
   Layout = "~/Views/Shared/_Layout.cshtml";
}

@Html.Partial("_MailForm")

我的 _MailForm.cshtml 文件如下所示:

@inherits System.Web.Mvc.WebViewPage<CMS.Models.Mail.MailModel>

@section HeaderContent
{
    <script src="@Url.Content("~/Scripts/mail.js")" type="text/javascript"></script>
}

<form>...</form>

_MailForm.cshtml 中声明的 HeaderContent 部分,假设从 _Layout.cshtml 呈现并加载 mail.js < / strong>脚本。该脚本实际上是加载,因此我的表单逻辑无效。如果我将 _MailForm.cshtml 中的 HeaderContent 部分移动到 SomePage.cshtml ,一切正常,因为mvc会加载脚本。

但是如何从 _MailForm.cshtml 文件中加载该脚本?

此致

1 个答案:

答案 0 :(得分:3)

好的,我会在这里重写 @BuildStarted 写的评论,这实际上是我的问题的答案:

“这实际上是设计的。这些部分只能填充直接父级。(...)最简单的方法[解决问题]将所有的javascript组合成一个文件。减少页面加载带宽并且通常使它对最终用户更好,因为他们只需要加载一次javascript文件...但是这不是你正在寻找的解决方案。因为SomePage.cshtml文件的部分页面是硬编码的我会说在那个页面中包含你所需的脚本现在还可以。还可以将脚本放在body标签中。“