gpt4 book ai didi

javascript - 从部分填充 Razor 部分

转载 作者:IT王子 更新时间:2023-10-29 02:42:27 26 4
gpt4 key购买 nike

我尝试这样做的主要动机是让 Javascript 仅在页面底部的部分需要 Javascript 的其余部分,而不是在呈现部分的页面中间。

这是我正在尝试做的一个简化示例:

这是正文之前带有脚本部分的布局。

<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
</head>

<body>
@RenderBody()
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
@RenderSection("Scripts", false)
</body>
</html>

这是使用此布局的示例 View 。

<h2>This is the view</h2>

@{Html.RenderPartial("_Partial");}

@section Scripts {
<script type="text/javascript">
alert("I'm a view.");
</script>
}

这是从 View 中呈现的部分。

<p>This is the partial.</p>

@* this never makes it into the rendered page *@
@section Scripts {
<script type="text/javascript">
alert("I'm a partial.");
</script>
}

在此示例中, View 中指定的标记被放置到部分中,但部分中的标记没有。是否可以使用 Razor 从局部 View 填充部分?如果不是,还有哪些其他方法可以获取仅在页面底部部分需要的 Javascript 而无需全局包含它?

最佳答案

我处理这个问题的方法是为 HtmlHelper 类编写几个扩展方法。这允许部分 View 说他们需要一个脚本,然后在写入标记的布局 View 中我调用我的辅助方法来发出所需的脚本

以下是辅助方法:

public static string RequireScript(this HtmlHelper html, string path, int priority = 1)
{
var requiredScripts = HttpContext.Current.Items["RequiredScripts"] as List<ResourceInclude>;
if (requiredScripts == null) HttpContext.Current.Items["RequiredScripts"] = requiredScripts = new List<ResourceInclude>();
if (!requiredScripts.Any(i => i.Path == path)) requiredScripts.Add(new ResourceInclude() { Path = path, Priority = priority });
return null;
}

public static HtmlString EmitRequiredScripts(this HtmlHelper html)
{
var requiredScripts = HttpContext.Current.Items["RequiredScripts"] as List<ResourceInclude>;
if (requiredScripts == null) return null;
StringBuilder sb = new StringBuilder();
foreach (var item in requiredScripts.OrderByDescending(i => i.Priority))
{
sb.AppendFormat("<script src=\"{0}\" type=\"text/javascript\"></script>\n", item.Path);
}
return new HtmlString(sb.ToString());
}
public class ResourceInclude
{
public string Path { get; set; }
public int Priority { get; set; }
}

一旦你有了它,你的局部 View 只需要调用 @Html.RequireScript("/Path/To/Script")

然后在布局 View 的头部调用 @Html.EmitRequiredScripts()

这样做的一个额外好处是,它允许您剔除重复的脚本请求。如果您有多个需要给定脚本的 View /部分 View ,您可以放心地假设您只会输出一次

关于javascript - 从部分填充 Razor 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5355427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com