【发布时间】:2016-11-04 15:39:42
【问题描述】:
我有一个场景,我想根据请求类型加载脚本。例如,假设我有这个代码:
@section scripts {
<script>
$('#tabsContainer').InitializeTabs();
</scripts>
}
当我想加载整个页面时,这加载得很好。但是,我有一个用户也可以部分加载页面的东西。场景是这样的:
public ActionResult Page() {
if (Request.IsAjax()) return PartialView();
return View()
}
问题是,如果它被部分加载,脚本就不能工作,因为@section 脚本不能部分工作。如果我把它放在部分脚本之外,它不能在全视图下工作,因为我的脚本在底部,并且它试图在加载实际的 JavaScript 文件之前运行脚本。
我想知道实现这一点的好方法。我可以将我的脚本移动到页面顶部,这应该可以解决所有问题。我也可以有 2 个不同的脚本,但这可能意味着我必须编写两次相同的代码。
有没有人知道实现这个的好方法?也许是一个 Html 助手,它根据请求类型在 @section scripts {} 或常规脚本标签中加载脚本?
基本上,写这个的正确方法是什么:
@if (!Request.IsAjaxRequest())
{
<text>
@section scripts
{
<script>
$(function () {
$("#tabs").tabs();
});
</script>
}
</text>
}
else
{
<text>
<script>
$(function () {
$("#tabs").tabs();
ga('set', 'page', '/new-page.html'); // Update Google Analytics
});
</script>
</text>
}
提前感谢您的帮助。
【问题讨论】:
-
脚本应该永远是部分的。将您的脚本放在视图或布局中
-
我不同意这种情况。当然,我同意他们应该几乎从不处于局部视图中。但是,有一个可以在PartialView中渲染的FullView,我觉得可能还可以吧?您能否在加载视图后定义另一种方式我可以 $('#tabs').Initialize() (无论是完整的还是部分的。除了我上面发布的方法之外)?
-
添加了一个例子来进一步说明我的观点。
标签: asp.net-mvc razor asp.net-mvc-5