在ASP.Net MVC应用程序中的另一个JS文件中调用函数的问题

时间:2014-08-27 04:01:57

标签: javascript asp.net-mvc

我是ASP.NET MVC的新手。我有一个asp .net MVC应用程序。我有一个视图index.cshtml。我有两个JS文件: - Master.js和Child.js。所有JS函数都在Master.js中定义,这些函数在Child.js文件中使用。

我收到以下错误:对象不支持属性或方法'method1'。

如果我复制Master.js的整个代码并将其放在Child.js的代码之上,那么它在MVC应用程序中工作得非常好。

这两个JS文件在ASP.NET Web表单应用程序中运行良好。

我尝试在_layouts.cshtml和child.js index.cshtml中加载master.js文件。我希望master.js会在child.js之前加载。

index.cshtml: -

@section JavaScript    
{        
    <script src="../Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>    
    <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js"></ script>
    <script src="../Scripts/child.js" type="text/javascript"></s cript>
}

layout.cshtml:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title</title>
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/Master.js")
    @RenderSection("javascript", false)
</head>
<body>
    @RenderBody()      
</body>
</html>

提前致谢

其他信息:

在Master.js中:我正在扩展方法如下:

$.fn.method1 = function()
{
   //My Code
};

我是child.js:我使用的方法如下:

$('#MyDiv').method1();

我遇到以下链接:

Problems with Jquery function extend in MVC4

2 个答案:

答案 0 :(得分:0)

我通常会像这样包装扩展函数:

(function ($) {
    $.fn.method1 = function() {
       //My Code
    };
})(jQuery);

根据documentation,这似乎是推荐的方式。它有助于避免$对象上的冲突。

  

[...]与其他插件配合良好,仍然可以使用   在jQuery $别名中,我们需要将所有代码放在一个   立即调用函数表达式,然后传递函数   jQuery,并将参数命名为$

如果您尝试通过捆绑包加载这些脚本,则需要以下内容:

public class BundleConfig
{
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquerywithcustomscripts").Include(
                    "~/scripts/jquery-{version}.js",
                    "~/scripts/master.js",
                    "~/scripts/child.js"));
    }
}

在_Layout.cshtml中使用它:

Scripts.Render("~/bundles/jquerywithcustomscripts")

答案 1 :(得分:0)

在您包含jQuery之前,我认为您正在包含Master.js函数。渲染时,标题部分在发送到浏览器时会如下所示:

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>@ViewBag.Title</title>
    <script type="text/javascript" src="/bundles/modernizr"></script>
    <script type="text/javascript" src="/master.js"></script>
    <script src="../Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>    
    <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js"> </script>
    <script src="../Scripts/child.js" type="text/javascript"></script>       
</head>

如果你在master.js中扩展jQuery,你需要在master.js引用之前包含jQuery。当你将master.js中的所有代码复制到child.js时它可能起作用的原因是因为到那时jQuery已被定义。