繁体   English   中英

从Ajax Post获取空值

[英]Getting Null from Ajax Post

我试图将我的模型从我的Web应用程序中导入到后期操作中。 唯一的问题是,我得到了一个在:(内具有1个空变量的模型对象。动作是:

[HttpPost]
[ValidateAntiForgeryHeader]
public async Task<JsonResult> StartRound(RoundModel model)

模型如下:

编辑:感谢Nick Bailey,我开始发现许多对以下内容进行编辑的问题:

  • 删除了不需要的回合
  • 将“匹配项更改为列表”更改为不确定模型构造函数是否默认为“接口”
  • 将OldId更改为int,因为这是唯一的类型,Json对象将其作为int进行操作
  • 将SystemId和AdminAprovedWinnerId更改为nullable,因为它们都希望可以为null
  • 未经编辑的所有构造函数,我发现我没有默认的构造函数,因此没有办法构造它
  • 如上所述添加了默认构造函数
public class RoundModel
{
    public List<ClientMatch> Matches { get; set; } // null in action
}

public class ClientMatch
{
    public int OldId { get; set; }
    public string RoundName { get; set; }
    public string ServerName { get; set; }
    public string ServerPassword { get; set; }
    public string ServerMessage { get; set; }
    public Guid? SystemId { get; set; }
    public Guid? AdminAprovedWinnerId { get; set; }
    public Guid TeamAId { get; set; }
    public Guid TeamBId { get; set; }
    public int TeamAVote { get; set; }
    public int TeamBVote { get; set; }

    public ClientMatch()
    {

    }

    public ClientMatch(MatchWithTmpId noGuid)
    {
        ...
    }
}

您将注意到,Round对象是具有虚拟属性的Code First模型。 我已在上载此问题以对其进行测试之前将其从RoundModel中删除,并且将其删除并不能解决问题。

和我的Ajax帖子

编辑:感谢Nick Bailey,我开始发现许多对以下内容进行编辑的问题:

  • SystemId现在传递null,因为0无法解析为GUID
  • TeamAVote和TeamBVote都通过1(其对应于一个枚举)
  • 目前,我将它们嵌套在RoundModel中,因为这是我最后一次尝试使其工作
POST http://localhost:52690/Admin/StartRound HTTP/1.1
Host: localhost:52690
Connection: keep-alive
Content-Length: 752
Accept: */*
Origin: http://localhost:52690
X-Requested-With: XMLHttpRequest
__RequestVerificationToken: TU5lBruq0K0FBxviWOS1GVjtRFw0edbCvE57bzh3wikqlXTw384jgxGBic61nMgUNwAXRgbf50cpk0naKADQgwnR9aNq1R55SSHj6UvszBRdfJ8nt362OFBQLC7eWLTwAwPJUVkRrFQkCOnZwtL6SQ2
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:52690/Admin/MatchScheduler
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8
Cookie: redacted

{
   "RoundModel":{
      "Matches":[
         {
            "SystemId":null,
            "OldId":0,
            "RoundName":"awd",
            "ServerName":"Apogawd0",
            "ServerPassword":"apog",
            "ServerMessage":"Can Team \"Lovin it\" please create server \"Apogawd0\" hosted in Oceania Servers, random map",
            "AdminAprovedWinnerId":null,
            "TeamAId":"74206e93-33aa-48d4-bac2-5f9acac0be90",
            "TeamBId":"35d4be62-4e3e-4575-8ce9-6c819382b50c",
            "TeamAVote":1,
            "TeamBVote":1
         }
      ]
   }
}

感谢所有帮助,干杯,迈克尔。

编辑续:感谢尼克让我了解了基础知识,我已经进行了更改,哈哈,我在JS领域花费了太多时间。 比赛仍然无效

您要为round参数传递一个空对象,因此自然而然地将其为null。 TeamAVote和TeamBVote在客户端匹配模型上是不可为空的字段,因此序列化的Jason无法解析您发布的空值。 我将使这些字段为空。

另外,对您的API模型和数据模型使用不同的模型通常是一个好主意。 通常,它们之间的差异足以使共享代码成为问题。

难题的最后一部分令人沮丧。 我停止使用JSON作为表单数据,然后回到原始js对象,突然间成功! 因此,我再次查看了标头并确定: Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Content-Type: application/x-www-form-urlencoded; charset=UTF-8所以我进入了我的Ajax方法并添加: contentType: "application/json"

最后:)成功,谢谢尼克·贝利(Nick Bailey),正是您使我步入正轨,所以我将为您提供答案。

请编辑您的问题以表明完整答案已包含在我的答案中,或者仅更新您的问题以包含解决方案。

再次感谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM