(道歉提前爲長職位,但在我束手無策)..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服務器的特定組合?..對不起,有點損失來描述它更好..併爲混亂的解釋道歉(在我自己的腦子裏,我能清楚地說明問題):)
感謝您的回覆。我想我在週末找到了答案之一。基本上我的網站的標記有問題..由於我經驗不足,我一直在嵌套表單(我發現這是一個禁忌),這導致我的佈局中加載的核心jquery腳本被淘汰,因爲它..自從我重新設計了我的網站標記並且一直在使用Chrome進行測試,這對於這些設計問題來說更加不容易。 –
不幸的是,我嘗試升級到使用JQuery 1.8時似乎遇到了問題。 1與同一網站。顯示/隱藏功能的JQuery腳本停止工作幾頁,而它們在1.5.1(瀏覽器/ Web服務器的相同組合)下正常工作, –