2012-12-30 60 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)。

相關問題