首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery AJAX -控制器上的数据参数空白

jQuery AJAX -控制器上的数据参数空白
EN

Stack Overflow用户
提问于 2012-11-16 16:51:48
回答 3查看 1K关注 0票数 1

使用ASP.NET MVC 3,我正在进行一个jQuery (ver 1.7.1) AJAX调用,就像我做了10亿次那样。然而,我注意到了一些奇怪的事情。以下调用运行良好的

代码语言:javascript
复制
// license object
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};
// make the request
var $req = $.post('/License/theLicense', license); 
$req.success(function () {
    // this works!
});


[HttpPost]
public void Save(License theLicense)
{
    // save
}

但是,当我为控制器指定数据参数时,它不会在控制器注册

代码语言:javascript
复制
// license object
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};
// make the request
// this time the controller parameter is specified
// the object will be blank at the server
var $req = $.post('/License/theLicense', { theLicense: license });
$req.success(function () {
    // this does not work
});

对象在控制器处为空,如下所示:

这很烦人,因为我需要传递另一个数据参数,但由于这个问题,我不能。

注意: JSON与完全相同。

为什么当我指定数据参数时,该对象在控制器上显示为空白,但当我不显示时,它就很好了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-27 15:51:47

有时,POCO反序列化器会因为奇怪的原因而陷入困境。我以前见过JSON对象与POCO完全匹配的地方,它仍然不会反序列化。

当发生这种情况时,我通常将对象作为JSON字符串发送到服务器,然后在服务器上反序列化它。我个人使用ServiceStack.Text是因为它是最快的。

所以你的jQuery是这样的:

代码语言:javascript
复制
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};

var $req = $.post('/License/theLicense', JSON.stringify(license));

然后,Controller将接受一个string参数(json)来反序列化对象:

代码语言:javascript
复制
   [HttpPost]
   public void Save(string json)
   {
       License theLicense = JsonSerializer<License>.DeserializeJsonString(json);
       // save
   }
票数 3
EN

Stack Overflow用户

发布于 2012-11-16 17:03:43

之所以会发生这种情况,是因为您正在发送一个包含许可的对象作为成员,但是您的控制器需要一个License对象。

您必须为数据声明一个包装类,如下所示:

代码语言:javascript
复制
  public Class MyWrapperClass
  {
      public License theLicense;
      //declare other extra properties here  
  }

你的控制器:

代码语言:javascript
复制
[HttpPost]
public void Save(MyWrapperClass thewrraper)
{
    var license = thewrapper.theLicense;
    // save
}

编辑:尝试用quotations.eg({"theLicense": license })包围json对象的成员

票数 1
EN

Stack Overflow用户

发布于 2012-11-16 17:42:01

试试这个:

联署材料:

代码语言:javascript
复制
// license object
var license = {
    City: "New York",
    CompanyID: 1,
    County: "N/A",
    IsActive: true
};

var $req = $.post('/License/Save', { theLicense: license });
$req.success(function () {
    // this does not work
});

.NET

代码语言:javascript
复制
public class LicenseController: Controller 
{
   ...

   [HttpPost]
   public void Save(License theLicense)
   {
       // save
   }

   ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13420932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档