2012-12-30 59 views
0

我有以下代码,当用户单击登录按钮时,会将登录页面加载到我的 单页网站中。在这种情况下,href调用一个MVC4控制器,并返回一个带有HTML的局部视图。如何在需要时将JavaScript加载到单个页面ASP.NET MVC4网站?

$('#loginLink') 
    .click(function() { 
     var $link = $(this); 
     var href = $link.attr('data-href'); 
     $('#article').load(href); 
    } 
    return false; 
}); 

但我也需要有一些额外的JavaScript从服务器加载 。有人可以告诉我,当页面加载时,我可以如何做到这一点。而不是在我所有的JavaScript被加载到浏览器的开始。

这里的登录页面我MVC4代码:

@model WebUx.Models.LoginModel 

<section id="content" class="grid_9"> 
    ........ 
</section> 

@Scripts.Render("~/bundles/jqueryval") 

下面是JavaScript的束C#代码:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
      "~/Scripts/jquery.unobtrusive*", 
      "~/Scripts/jquery.validate*")); 

即使脚本,渲染的话,好像他们不加入网页,当我检查与铬开发者工具。理想情况下,我不希望他们内联。我希望他们加载正常的js,浏览器可以检查它的js缓存。

回答

1

实际上添加了脚本。在你的特定情况下,你添加了jQuery不引人注目的验证脚本,我猜他们不适合你,因为一旦你将新内容注入到DOM中,你就没有调用$.validator.unobtrusive.parse方法:

因此,确保你已注册的所有新元素添加到DOM与不引人注目的验证框架:

$('#loginLink').click(function() { 
    var $link = $(this); 
    var href = $link.attr('data-href'); 
    $('#article').load(href, function() { 
     $('form').removeData('validator'); 
     $('form').removeData('unobtrusiveValidation'); 
     $.validator.unobtrusive.parse('form'); 
    }); 
    return false; 
}); 
+0

嗨达林,当我检查Chrome浏览器时,我根本看不到这些脚本。我加载这样的部分页面:.load(href);如果它是一个局部页面,那么javascript会以正常的方式呈现并包含,就像我在这里看到的只是我的部分内容并将HTML放入文章DOM元素中。 –

+0

你在哪里检查Chrome浏览器?我希望你没有浏览你的HTML页面的源代码(因为你永远不会看到任何装有AJAX的东西),但你正在看网络标签。 –

+0

我使用了开发人员>工具,并单击了sources选项卡查看已加载的javascript。我将清除缓存并查看网络选项卡。谢谢 –

0

要执行你用Ajax加载代码,你可以创建一个代码的新标签,并把它添加到页面。例如:

$("#article").append("<script type='text/javascript' src='script.js'></script>"); 

应该执行“的script.js”的内容(只要是在页面的ID为“#article”的元素)。 在IE中,标签必须在您希望脚本运行的那一刻添加到页面中(您不能只在脚本标签上使用.load)。

相关问题