【问题标题】:ASP.NET MVC partial rendering issue using Razor使用 Razor 的 ASP.NET MVC 部分呈现问题
【发布时间】:2011-05-02 09:24:01
【问题描述】:

我为我的 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渲染并加载ma​​il.js 脚本。该脚本实际上 加载,因此我的表单逻辑无法正常工作。如果我将 HeaderContent 部分从 _MailForm.cshtml 移动到 SomePage.cshtml,一切正常,因为 mvc 加载了脚本。

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

问候

【问题讨论】:

  • 这实际上是设计使然。这些部分只能填充直接父级...我也遇到了同样的问题。
  • 是否有任何解决方法,或者一些不同的方法来解决这个问题?将该部分移动到其渲染父级的直接子级是唯一的解决方案?
  • 嗯,最简单的方法是将所有 javascript 合并到一个文件中。这会减少页面加载带宽,并且通常会使最终用户更好,因为他们只需加载一次 javascript 文件......但这不是您正在寻找的解决方案。由于SomePage.cshtml 文件对部分页面进行了硬编码,我想说在该页面中包含您所需的脚本现在还可以。另外,将脚本放在body标签中也可以。

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


【解决方案1】:

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

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

【讨论】:

  • 但是 javascript 的相关样式或样式表呢?一些 javascript 插件如 jquery ui 的东西,dropdownmenus 等与 css 和样式紧密绑定,不能直接放入 body。
  • 此外,在大多数情况下,您根本无法从局部视图访问主体。有什么解决办法吗?
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多