使用Jquery Ajax渲染带有变量数据的部分视图。

9

我已经阅读了这篇文章,但是我不确定如何从用户中获取数据使其工作。以下是我使用的ajax jquery代码。我知道(或者至少认为)这不能渲染部分视图。但它一直工作到渲染失败。我认为这可能会有所帮助。

 $.ajax(
     {
         type: 'POST',
         contentType: 'application/json; charset=utf-8',
         data: "{'test':" + "'" + dateText + "'}",
         dataType: 'json',
         url: 'Site/Grab/',
         success: function (result) {
         alert('Success');
         },

         error: function (error) {
            alert('Fail');
         }
      });

这是我的控制器

[HttpPost]
    public ActionResult Grab(string test)
    {
        DateTime lineDate= Convert.ToDateTime(test);
        List<Info> myInfo= GameCache.Data(lineDate);
       return PartialView("_PartialView", myInfo);
    }

如果它在尝试渲染部分视图之前工作正常,那么问题很可能在于部分视图的标记。请提供该代码以及您收到的错误信息。 - StriplingWarrior
2个回答

18

好的,有几件事情可以尝试:

1)dataType是ajax调用的预期结果。在您的情况下,您发送JSON,但接收HTML。 content-type参数指定了请求,您已经有了(您所拥有的是正确的)。因此数据类型应该是:

dataType: 'html',

2) 你需要对JSON进行序列化。尝试使用轻量级的JSON库并对其进行 stringify 操作:

var test = { test: 'testvalue' };
$.ajax {
   ...
   data: JSON.stringify(test),
   ...
});
比试图用带引号的JSON字符串强制转换要简单得多。创建一个常规的JS变量,然后将其字符串化即可。
您的其余代码看起来很好。
如果这是关于部分视图本身的HTML/标记的问题,请在调试模式下运行,并且Visual Studio应该会在引起问题的标记行上停止。
额外提示:ASP.NET MVC 3包括内置的JSON模型绑定。因此,您可以创建一个基本的POCO,以匹配您的JSON对象的字段,然后在操作方法中将其接受为强类型对象。
[HttpPost]
public ActionResult Grab(MyJsonObject obj) 
{
   DateTime lineDate= Convert.ToDateTime(obj.test);
   List<Info> myInfo= GameCache.Data(lineDate);
   return PartialView("_PartialView", myInfo);
}

如果你只发送一个参数,那就有点过度了——但是如果你有两个以上的参数,使用一个 JSON POCO 是值得的。


2
当我将数据类型切换为HTML时,问题得到了修复。 - dan_vitch

3

将您的控制器代码更改为:

public ActionResult Grab(string test) {
  DateTime lineDate= Convert.ToDateTime(test);
  List<Info> myInfo= GameCache.Data(lineDate);

  return Json(new { data = this.RenderPartialViewToString("_PartialView", myInfo) });
}

“RenderPartialViewToString()” 方法存在于哪里? - Muneer
请点击以下链接查看有关在ASP.NET MVC 3中实现RenderPartialViewToString的内容:http://www.c-sharpcorner.com/blogs/7150/implementing-renderpartialviewtostring-in-asp-net-mvc-3.aspx 或者 http://craftycodeblog.com/2010/05/15/asp-net-mvc-render-partial-view-to-string/ - Marc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接