2011-08-29 58 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()的工作方式。

解决问题的最简单方法是在部署时将网站置于域根。

相关问题