将js文件加载到局部视图中

时间:2016-08-03 06:00:34

标签: javascript jquery asp.net-mvc

我有一个布局,一个视图和一个局部视图。我在视图中使用了我的布局,在视图中我将带有​​ajax的局部视图加载到视图中。我在我的布局中使用了@RenderSection("Script", required: false)来将我的验证js文件加载到具有以下语句的部分视图中:

@section Script{
    <script src="~/Content/js/register.js"></script>
}

但是在运行我的项目并获取视图源后,我看到该文件仍然没有加载到此页面。然后我以这种方式将@section Script{ <script src="~/Content/js/register.js"></script> }放入我的视图中加载文件,但任何验证都不会运行。但是当我将脚本文件代码复制到部分视图中时,它们正在运行。现在我想知道为什么当我使用文件时不运行我的脚本?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以参考以下代码来渲染您的脚本:

function loadScript(url, callback){

    var script = document.createElement("script")
    script.type = "text/javascript";

    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

在您的情况下,您必须使用此功能:

成功请求后:

$('#divreg').html(data);
loadScript("~/Content/js/register.js", function(){
    //initialization code
});

希望它可以解决您的问题。

由于

快乐编码:)

答案 1 :(得分:0)

您无法在局部视图中使用@section Scripts{}。它什么都不改变,也不会渲染。如果没有Section Helper,你最好使用脚本文件。

了解更多: Injecting content into specific sections from a partial view ASP.NET MVC 3 with Razor View Engine

答案 2 :(得分:0)

要对此问题进行更新,目前这是我们在Razor局部中内部进行此操作的方式:

  • 触发按钮单击,部分视图在父视图中呈现
  • 部分视图在具有js标签的文件中或位于script src="..标签本地的文件中具有<script>自己的段
  • 类似于document.readyIFFE用于立即调用一系列事件以加载部分中保存的JS小部件等。
  • 部分视图正确加载JS。

IFFE的示例为:

<script>
    function ShoutAtMe(str) {

        alert(str)

    }

    (_ => {
        ShoutAtMe("HELLO")
    })();
</script>

此脚本块将位于Partial之内。