2012-09-12 26 views
0

(道歉提前爲長職位,但在我束手無策)..ASP.NET MVC 3 JQuery的腳本丟失

我越來越用jQuery腳本被「丟失」一個奇怪的問題,對於想更好的詞,在我的MVC 3應用程序。

在我的應用程序,我有以下_Layout.cshtml文件:

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

    <script src="@Url.Content("../Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("../Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

</head> 
<body> 

    <div class="page"> 

     <div id = "sidebar"> 
      @{ Html.RenderPartial("_Sidebar"); }    
     </div> 

     <div id="main">    
      @RenderBody() 
     </div> 

     <div id="validationresults"> 
      <div id="validationresultsinner"></div> 
     </div> 

     <div id="footer"></div> 

    </div> 
</body> 
</html> 

側邊欄本身就是一個包含了兩個其父視圖加載到「主」區域Ajax.ActionLinks的局部視圖我的_Layout.cshtml的..

<ul> 
<li>@Ajax.ActionLink("Section 1", "WizardParentView", "Section1",null, new AjaxOptions() 
    { UpdateTargetId = "main", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }, new { id = "sect2" })</li> 
<li>@Ajax.ActionLink("Section 2", "WizardParentView", "Section2", null, new AjaxOptions() 
    { UpdateTargetId = "main", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }, new { id = "sect2" })</li> 
</ul> 

此WizardParentView本身包含結合使用與MVCWizard.Wizard從一個的NuGet形式Ajax.Begin,到主機的選擇,用戶可以導航通過網頁(例如嚮導式頁面)

例如

@model MyDataModel 

@{  
    FormWizardManager<MyDataModel> wm = (FormWizardManager<MyDataModel>)Session["TheSection"]; 
    Layout = "";  
} 

@using (Ajax.BeginForm("WizardParentView", "Section1", new AjaxOptions() { 
UpdateTargetId= "wizard", InsertionMode = InsertionMode.Replace })) 
{ 
    <div id="wizard"> 
    @Html.WizardHeader(wm, true) 
    @{Html.RenderAction(wm.CurrentPage.PagePartialView);} 
    @Html.WizardFooter(wm, "Next Page " + (wm.Index + 1), "Previous Page" + (wm.Index - 1), "Save this Section")  
    </div> 
} 

@Content.Script("jquery.validate.js", Url) 
@Content.Script("jquery.validate.unobtrusive.min.js", Url) 
@Content.Script("UIHelpers.Section1.js", Url) 

我也有一些必要的功能來修改側邊欄中的項目的文本,永久地反映了用戶通過嚮導的進度狀態。這種文本修改是通過在回發時執行的另一位JQuery實現的(當調用服務器端驗證時)。正如你所看到的,當再次單擊一個側邊欄鏈接(在它可能已被修改之後)時,爲了停止原始的側邊欄部分重新加載,我還必須在加載WizardParentView時清除佈局。

事情是,當我在開發環境(IE9與任何IIS7 Express或Visual Studio 2010 Web開發服務器)中運行此,需要JQuery或JQuery.Unobtrusive.Ajax的所有頁面加載和功能工作正常

但是,在完整的II7或II6下運行相同的網站(見下文)我發現核心腳本和所有相關功能加載和工作正常的前2頁導航嘗試,但在第三(例如第三次按「Next」),JQuery腳本絕對不再存在..意味着我的部分視圖加載到完整的網頁中,並且視圖內的任何jQuery功能都不再起作用。

而且混亂統治如下:

工作 的JQuery 1.5.1 IE9,IIS7快遞,Visual Studio的Web開發服務器

破碎 的JQuery 1.5.1 IE9,IIS6,IIS7, IIS7 Express
JQuery 1.5.1 Chrome/Firefox,IIS6,IIS7,II7 Express,Visual Studio Web開發服務器
JQuery 1.8.1 IE9,IIS6,IIS7,IIS7 Express,Visual Studio Web開發服務器

我認爲即使在第一次加載WizardParentView時清除佈局也會消除我在_Layout中加載的JQuery腳本,但事實是,基於JQuery的功能在2-3次導航嘗試後仍然有效,然後死亡,奇怪的是......更不用說,至少在上述配置中的一種配置中,應用程序的功能是完美的(不應該讓JQuery腳本在所有場景中都被清除掉?或者是某種奇怪的緩存繼續使用瀏覽器,JQuery版本和Web服務器的特定組合?..對不起,有點損失來描述它更好..併爲混亂的解釋道歉(在我自己的腦子裏,我能清楚地說明問題):)

回答

0

有你試圖改變

<script src="@Url.Content("../Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("../Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

,以便它可以正確映射服務器路徑通過相對路徑的這些文件?

+0

感謝您的回覆。我想我在週末找到了答案之一。基本上我的網站的標記有問題..由於我經驗不足,我一直在嵌套表單(我發現這是一個禁忌),這導致我的佈局中加載的核心jquery腳本被淘汰,因爲它..自從我重新設計了我的網站標記並且一直在使用Chrome進行測試,這對於這些設計問題來說更加不容易。 –

+0

不幸的是,我嘗試升級到使用JQuery 1.8時似乎遇到了問題。 1與同一網站。顯示/隱藏功能的JQuery腳本停止工作幾頁,而它們在1.5.1(瀏覽器/ Web服務器的相同組合)下正常工作, –