2011-08-29 66 views
1

我的MVC Razor應用程序使用jQuery UI選項卡和Ajax來加載其中一個選項卡,並且當我從遠程服務器訪問我的應用程序時與我的本地開發環境。jQuery UI選項卡ajax不從遠程服務器加載

本地運行,一切正常。我的選項卡調用一個控制器方法,該方法返回一個視圖,並按預期呈現該視圖。

但是,當我將其從生產服務器上運行時,控制器不會將任何內容返回到我的頁面。我已經進行了診斷檢查,並且可以驗證該方法正在被調用,正在從我的數據庫中提取正確的數據,並且正在發送已填充的ViewModel以及我的控制器的「返回視圖...」調用。

但是,在客戶端級別,沒有HTML被傳回給Javascript。 「alert(ui.panel.innerHTML);」下面的行只返回加載圖像的HTML和沒有被返回的視圖。

有沒有人知道爲什麼這兩種情況下的行爲會有所不同?

編輯:我有兩個不同的遠程服務器,開發人員和證書,都沒有工作。

謝謝!

的JavaScript:

var budgetPanelLoaded = false; 

    $("#tabs").tabs(); 

    $("#tabs").bind("tabsselect", function (event, ui) { 
     if ($(ui.tab).text() == "Budgets") { 
      if (budgetPanelLoaded != true) { 
       $(ui.panel).append("<img id='budgetsLoadingImage' src='/images/loading.gif' width='96' height='96' />"); 
      }; 
     }; 
    }); 

    $("#tabs").bind("tabsload", function (event, ui) { 
     if ($(ui.tab).text() == "Budgets") { 
      alert(ui.panel.innerHTML); 
      $("#budgetsLoadingImage").remove(); 
      budgetPanelLoaded = true; 
     }; 

    }); 

和控制器:

Function EditOrgBudgets(ByVal Orgid As Integer) As ActionResult 
     Dim db As New charityContainer 
     Dim o As Organization 
     Dim ovm As OrganizationViewModel 

     OpenContainer(db) 

     'Load the organization from the database 
     o = (From org In db.Organizations _ 
      Where org.Id = Orgid _ 
      Select org).FirstOrDefault() 

     If (o Is Nothing) Then 

      'Organization doesn't exist yet 
      Return View("OrganizationNotCreated") 
     Else 

      'Create any empty budgets that need to be created 
      CreateBudgetsForOrganization(o, db) 


      o.OrganizationBudgets = (From ob In db.OrganizationBudgets _ 
            Where ob.OrganizationId = o.Id _ 
            Order By ob.Budget.Year Descending _ 
            Select ob).ToList() 


      'Map it to the ViewModel 
      ovm = AutoMapper.Mapper.Map(Of Organization, OrganizationViewModel)(o) 

      Return View("OrganizationBudgets", ovm) 
     End If 

    End Function 

回答

0

好了,螢火蟲救援。

結果服務器WAS返回500錯誤,但jQuery正在清理出來,所以我沒有看到任何東西。我不得不用Firebug進行調試才能看到它,這對我來說是新的(但非常酷,希望我在幾個月前知道螢火蟲)。不管怎樣,最終的原因是我需要在我的Linq-to-SQL命令中使用「Include」,顯然這在我的本地計算機上是不需要的(本地SQL isntance使它不必要,也許?),但是當我部署在網絡中並且SQL數據庫是遠程的,它需要該選項。

+0

Firebug是一個救星。此外,Chrome的內置web開發工具很好(我認爲Firebug是基於它的?或者相反?)。但我更喜歡FireFox,因爲您可以安裝更多的插件來進一步幫助您。 – Flater

+0

@Ben Finkel我遇到了類似jQuery的問題。它在本地開發服務器上的MVC3網站上運行得非常好,但無法在生產服務器上運行。我正在使用jQuery購物車和使用jQuery lightbox的圖庫頁面。是否有任何調整或配置,通過我的腦海中,我應該做的? – user1079650

+0

我可以推薦的最好方法是使用Firebug並觀察您的服務器和Web瀏覽器之間的通信。您可能會驚訝地發現從服務器返回/發回的內容。 –

0

我有類似的問題,並發現這一點:

注:
如果你使用Windows2008r2,(你使用IIS7.5),以獲得消耗JSON任何控件工作,您可能需要:

  • 安裝IIS HTTP重定向功能(用戶界面發生了變化,所以大部分引用不正確是指到這是)。請參見服務器管理器,Web角色......

  • 運行:%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir正確寄存器內的.NET 4 IIS的64位架構(可能需要調整4.x版的版本)

  • 設置一個mime-類型爲json

  • 如果您通過.DataSource(dataSource => dataSource.Ajax(ajax => ajax.Select(獲取數據...並且您已經使用web-dev服務器在VS內部工作,請注意您在部署到IIS時會遇到問題。 (Fiddler揭示IIS返回404。0時,即使在定義了json mime類型之後,Select嘗試從引用的視圖中獲取JsonResult)。由於ajax.Select()的工作方式。

解決問題的最簡單方法是在部署時將網站置於域根。

相關問題