如何通过jQuery ajax更新ASP.NET MVC ViewData?

我有一个页面,高度依赖于我在ViewData中传递的IList(在ActionResult“MyEvents”中)。 类似的东西: ViewData [“events”] = listOfEvents; 最后,我只返回View();

在我的视图中,我接受了这个ViewData [“events”]并在其中做了一个foreach,所以我可以迭代它的内容。

但是,必须动态填充此ViewData。 所以,当我点击一天(我正在使用jQuery DatePicker)时,这一天作为参数发送到“MyEvents”,这一天对我的listOfEvents非常重要,它将填充我的ViewData [“events”]。

但是,我得到的结果是包含我的foreach的div在其中创建了另一个整页! 我试过做$(“#myDiv”)。html(contentFromMyEvents) ,这就是发生的事情。

仅仅是为了测试,我也试过做$(“#myDiv”)。text(contentFromMyEvents)和整个html代码及其所有标签和我页面中的其他内容都出现在div中! 这是一个页面内的页面!!

所以,我认为这种情况正在发生,因为我正在返回“ 返回View(); ”当然它会再次渲染我的整个View。

那么,我怎样才能传递ViewData [“events”]并在我的页面上更新它?

谢谢!!

查看jQuery中的load函数( http://docs.jquery.com/Ajax/load )。 使用load调用控制器,然后将结果注入到html文档中。

$("myDiv").load("/Controller/Action"); 

您的ViewData将在服务器端进行解析。 而不是返回View(),返回指向用户控件的PartialView()。 出来的只是一个HTML片段。

您可以使用部分渲染,也可以让jquery从返回值中选择元素。

 $("#myDiv").empty().append($(contentFromMyEvents).find('#myDiv')); 

此外,请记住,如果您有任何日期选择器或链接需要在此处进行事件,您可能需要重新绑定它们。

您应该考虑以JSON的forms来回传递数据。

然后使用jQuery / Javascript根据需要操作和格式化数据。

请记住,一旦页面在客户端上,客户端的浏览器就不知道ViewData是什么。

编辑:行动代码:

 public ActionResult AjaxGetEvents(int id) { IList events = new List(); foreach( Event event in SomeMethodToGetEvents(id) ) { events.Add( new { Property1 = event.Property1, Property2 = event.Property2 } ); } return JSON(events); } 

客户端代码:

 var url = "some url that returns JSON"; jQuery.getJSON( url, function(data){ jQuery.each( data ){ jQuery("#someDiv").append( data.Property1 + " " + data.Property2 "
" ); }); });