2010-05-26 73 views
3

我正在将jquery fullcalendar整合到我的应用程序中。 这里是我使用的代码:返回Json在asp.net中导致保存文件对话框mvc

中的Index.aspx

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#calendar').fullCalendar({ 
      events: "/Scheduler/CalendarData" 
     }); 
    }); 
</script> 

<div id="calendar"> 
</div> 

这里是调度/的CalendarData代码:

public ActionResult CalendarData() 
    { 

     IList<CalendarDTO> tasksList = new List<CalendarDTO>(); 

     tasksList.Add(new CalendarDTO 
     { 
      id = 1, 
      title = "Google search", 
      start = ToUnixTimespan(DateTime.Now), 
      end = ToUnixTimespan(DateTime.Now.AddHours(4)), 
      url = "www.google.com" 
     }); 
     tasksList.Add(new CalendarDTO 
     { 
      id = 1, 
      title = "Bing search", 
      start = ToUnixTimespan(DateTime.Now.AddDays(1)), 
      end = ToUnixTimespan(DateTime.Now.AddDays(1).AddHours(4)), 
      url = "www.bing.com" 
     }); 

     return Json(tasksList,JsonRequestBehavior.AllowGet); 
    } 

    private long ToUnixTimespan(DateTime date) 
    { 
     TimeSpan tspan = date.ToUniversalTime().Subtract(
     new DateTime(1970, 1, 1, 0, 0, 0)); 

     return (long)Math.Truncate(tspan.TotalSeconds); 
    } 

    public ActionResult Index() 
    { 
     return View("Index"); 
    } 

我也有内部头下面的代码标签在site.master:

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server" /> 
<link href="<%= Url.Content("~/Content/jquery-ui-1.7.2.custom.css") %>" rel="stylesheet" type="text/css" /> 
<link href="~Perspectiva/Content/Site.css" rel="stylesheet" type="text/css" /> 
<link href="~Perspectiva/Content/fullcalendar.css" rel="stylesheet" type="text/css" /> 
<script src="~Perspectiva/Scripts/jquery-1.4.2.js" type="text/javascript"></script> 
<script src="~Perspectiva/Scripts/fullcalendar.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script> 

我所做的一切都非常复制f rom http://szahariev.blogspot.com/2009/08/jquery-fullcalendar-and-aspnet-mvc.html

当浏览到/ scheduler/calendardata我得到一个提示保存JSON数据,其内容正是我在CalendarData函数中创建的。

为了正确渲染页面,我需要做些什么?

由于提前,

叶兰

更新:继符文的和弗郎的意见,我添加了一个名为CalendarData.aspx观点是一致的Index.aspx。结果:

  • 导航到/ scheduler/calendardata 仍然给我保存文件对话框。
  • 导航到/ scheduler/index我得到 以下运行时错误在Visual Studio:Microsoft JScript运行时 错误:对象预期。 VS 突出显示代码在脚本标记中的 $(document).ready(function()...) 。
+0

如果您还没有更改其他任何内容,添加CalendarData.aspx视图不会更改任何内容,因为没有操作返回该视图。 导航到/ scheduler/index时可能看到的是正确的页面,但它有一个javascript错误。看起来你的ASP.NET MVC的东西(视图和操作)现在是正确的,但是JavaScript有问题。尝试使用FireFox或Chrome访问/ scheduler/index并进一步调查js错误,可能使用FireFug的FireBug插件 – Rune 2010-05-26 20:55:43

+0

您是否曾经修复过这个问题?我现在有这个问题,似乎无法克服它。 – joshlrogers 2010-07-27 19:58:12

+0

我已经触摸了这段代码已经有一段时间了,但是如果我没有记错的话,解决方案是将所有到css和js文件的链接放在aspx文件中而不是母版页中,并使用Url.Content()对它们进行编码。希望这可以帮助! – Eran 2010-08-19 21:28:41

回答

0

您需要导航到映射到返回Index.aspx的操作的URL而不是映射到CalendarData()的URL。我认为这将是“/ scheduler”。当你转到“/ scheduler/calenderData”时,服务器会将Json数据直接返回给浏览器。

+0

感谢您的评论。请在帖子中看到更新。 (叶兰) – Eran 2010-05-26 20:39:28

0

如果您在浏览器中导航到/scheduler/calendarData,浏览器会收到Content-Type: application/json的响应。某些浏览器不知道如何显示此类内容类型,因此它们允许您将内容保存为本地文件,以便您可以在其他程序中查看它。

您应该导航到您的浏览器到/scheduler/index,而不是返回一个人类可读的结果,可以由所有浏览器呈现(具有Content-Type: text/html)。

如果你想看到调试目的通过CalendarData返回的内容,你有两个选择:

  • 使用的浏览器能够理解Content-Type: application/json
  • 使用工具,如Fiddler,它允许你检查HTTP流量
0

尝试使用JSonResult而不是ActionResult。

0

我有同样的问题,我错过了基本的ActionResult,返回视图开始......?我认为这是更深层次的东西......但这里有一些基本的事情来检查,解决了我的问题;

in my Homecontroller;

public ActionResult Index() 
    { 
     ViewData["Message"] = "Whatever!!! just work!"; 

     return View(); 
    } 
全球

,我也只好refix我maproutes恢复为默认,因为我是roting到的GetData操作时尝试的事情来解决它:

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
); 
1

尝试使用JSonResult,而不是一个ActionResult的。

public JSonResult CalendarData() 
{ 
    IList<CalendarDTO> tasksList = new List<CalendarDTO>(); 

    tasksList.Add(new CalendarDTO 
    { 
     id = 1, 
     title = "Google search", 
     start = ToUnixTimespan(DateTime.Now), 
     end = ToUnixTimespan(DateTime.Now.AddHours(4)), 
     url = "www.google.com" 
    }); 
    tasksList.Add(new CalendarDTO 
    { 
     id = 1, 
     title = "Bing search", 
     start = ToUnixTimespan(DateTime.Now.AddDays(1)), 
     end = ToUnixTimespan(DateTime.Now.AddDays(1).AddHours(4)), 
     url = "www.bing.com" 
    }); 

    return Json(tasksList, JsonRequestBehavior.AllowGet); 
} 
0

我已经得到了这个,而无需最终用户经历疯狂的事情来工作的唯一方法是改变内容类型,以在返回“text/html的”。

我已经尝试了上面的所有建议,以及其他一些。

哎呀,我甚至试过this

相关问题