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

dan*_*tch 9 jquery renderpartial asp.net-mvc-3

我已经阅读过这篇文章了,但是我不知道如何让它能够从用户那里获取数据.这是我正在使用的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');
         }
      });
Run Code Online (Sandbox Code Playgroud)

这是我的控制器

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

RPM*_*984 18

好的,有几件事要尝试:

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

dataType: 'html',
Run Code Online (Sandbox Code Playgroud)

2)您需要序列化JSON.尝试抓取轻量级JSON库并进行字符串化:

var test = { test: 'testvalue' };
$.ajax {
   ...
   data: JSON.stringify(test),
   ...
});
Run Code Online (Sandbox Code Playgroud)

比尝试使用quoatations强制使用JSON字符串要容易得多.创建一个常规JS变量,然后对其进行字符串化.

其余的代码看起来很好.

如果部分视图本身的HTML /标记出现问题,请在调试模式下运行,Visual Studio应停止在导致问题的标记行中.

Bonus提示:ASP.NET MVC 3包含内置的JSON模型绑定.因此,您可以创建与JSON对象的字段匹配的基本POCO,然后将其作为操作方法中的强类型对象接受:

[HttpPost]
public ActionResult Grab(MyJsonObject obj) 
{
   DateTime lineDate= Convert.ToDateTime(obj.test);
   List<Info> myInfo= GameCache.Data(lineDate);
   return PartialView("_PartialView", myInfo);
}
Run Code Online (Sandbox Code Playgroud)

由于你只发送一个参数,这是过度的 - 但如果你有超过2个,那么使用JSON POCO是值得的.

  • 当我切换数据数据类型为html修复问题. (2认同)