我有一个场景,我想根据请求类型加载脚本。例如,假设我有这段代码:


 @section scripts {
< script>
 $( '#tabsContainer')InitializeTabs();
< /脚本>
}
 代码>


 此当我想加载整页时,加载完全正常。但是,我有一个用户可以部分加载页面的东西。场景是这样的:


 public ActionResult Page(){
 if(Request.IsAjax())返回PartialView();&#xA ;返回View()
}



 问题是,如果部分加载,脚本不起作用,因为@部分脚本不能部分工作。如果我把它放在section脚本之外,它不能在完整视图上工作,因为我的脚本在底部,并且它正在尝试在加载实际的JavaScript文件之前运行脚本。

&# xA;我想知道实现这个的好方法。我可以在页面顶部移动我的脚本,这应该可以解决所有问题。我也可能有两个不同的脚本,但这可能意味着我必须编写两次相同的代码。


有没有人知道实现这个的好方法?也许是一个Html帮助程序,它根据请求类型在@section脚本{}或常规脚本标记中加载脚本?


基本上,写这个的正确方法是什么:


 @if(!Request。 IsAjaxRequest())
 {
 <文本>
 @section scripts
 {
 <脚本>
 $(function(){
 $(“#tabs”)。tabs();
});
 < /脚本>
 }
 < /文本>
}
否则
 {
 <文本>
 <脚本>
 $(function(){
 $(“#tabs”)。tabs();
 ga('set','page','/ new-page.html'); //更新Google Analytics
});
 < /脚本>
 < / text>
}



 提前感谢您的帮助。

答案 0 :(得分:0)
你可以在view()
中查看@if (Request.IsAjaxRequest())
{
<script>
alert('Partial view');
</script>
}
else
{
<script>
alert('Main view');
</script>
}
答案 1 :(得分:0)
我还没有机会测试的想法:在视图中存储一些关于请求是否是ajax请求的信息(例如在数据属性中),然后在脚本测试中那个价值并相应地做。
E.g:
<body data-isajaxrequest="@Request.IsAjaxRequest()">...</body>
然后是剧本:
$(function () {
function InitializeTabs() {
$("#tabs").tabs();
if ($("body").data("isajaxrequest")) {
// it's an ajax request
} else {
// not an ajax request
ga('set', 'page', '/new-page.html'); // Update Google Analytics
}
}
$('#tabsContainer').InitializeTabs();
});
根据需要将您的逻辑放在评论的位置。实际的脚本将进入完整视图。正如另一张海报所提到的,你不应该在部分视图中使用脚本。
答案 2 :(得分:0)
您可以尝试使用本机JavaScipt方式来解决此问题:
var myFunction = function () {
alert('myFunction called after 500ms.');
// do a lot of stuff here
}
// and then call the function after the page is loaded
// let's supose an half second later:
setTimeout(myFunction, 500);