2

当前使用 MVC3 并使用 jQuery $.post 函数将 ajax 请求发送到名为“SearchInitiated”的控制器操作。我在这里有点头疼,因为我不确定我的问题到底出在哪里。我敢肯定这是我忽略的一些小事。

当我从 AJAX 调用中调用 Controller 方法时,我将 json 对象(字符串化)传递给控制器​​操作。见下文:

来自 Chrome 的请求标头

接受:/ Content-Type:application/x-www-form-urlencoded;charset=UTF-8 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko)

铬/24.0.1312.52 Safari/537.17

X-Requested-With:XMLHttpRequest

表单数据视图

连接器ID:1

sessionId:97e2d8b2-be9e-4138-91ed-42ef9c6a2cd6

派对:{"Tag":null,"PartyIdentifier":"1","Address":null,"Address2":null,"BusinessName":"","CellPhoneNumber":null,"CIF":""," City":null,"Country":null,"DateOfBirth":null,"EMailAddress":null,"EmploymentTitle":null,"EmployerAddress":null,"EmployerAddress2":null,"EmployerCity":null,"EmployerName" :null,"EmployerPhoneNumber":null,"EmployerState":null,"EmployerZip":null,"Fax":null,"Firstname":"TEST","Lastname":"USER","MailingAddress":null," MailingAddress2":null,"MailingCity":null,"MailingState":null,"MailingZip":null,"Middlename":null,"PhoneNumber":null,"State":null,"TIN":"1111111","WorkPhoneNumber":null,"Zip":null}

javascript

 var parties =    @(Html.Raw(Json.Encode(Model.SearchParties)));
      function SearchForCustomer(id)
      {

      var currentSelectedParty = GetPartyById(id)
      //SearchPost is a wrapper for $.ajax using default values for dataType and contentType
      SearchPost(URL, {
                'connectorId': '@Model.ConnectorId',
                'sessionId': '@Model.SessionId',            
                'party' :  JSON.stringify( currentSelectedParty ) 
            }
      }

控制器

 public ActionResult SearchInitiated(int connectorId, string sessionId, SearchParty party)
 {
     code here....
 }

 public class SearchParty
    {
        public SearchParty();
        public SearchParty(string lastname, string firstname);

        public string Address
        {
            get;
            set;
        }
           public string City
        {
            get;
            set;
        }
        public string Country
        {
            get;
            set;
        }
        public string DateOfBirth
        {
            get;
            set;
        }

        .... etc etc
}

但是,聚会对象为空。

如果我将代码更改为以下内容,则所有内容都会正确反序列化为强类型对象。

 public ActionResult SearchInitiated(int connectorId, string sessionId, string party)
 {
     JavaScriptSerializer json_serializer = new JavaScriptSerializer();
            SearchParty sp =
                   json_serializer.Deserialize<SearchParty>(party);
 }

我知道我的 json 字符串是有效的,因为它在第二个代码片段中工作并且值正在调用中传递。我还能错过什么?

4

5 回答 5

3

试试这个。

public class SearchParty
{
  public string party { get; set; }

}

  [HttpPost]
  public ActionResult SearchInitiated(SearchParty party)
   {     
       ....
       return View();

  }
于 2013-01-09T12:31:29.937 回答
2

可能你需要将traditionaljQuery.ajax 的 prop 设置为 true 以实现传统的参数序列化风格

在文档准备好之后立即放置下面的代码行

$(function(){
 jQuery.ajaxSettings.traditional = true;
});

这个SO question 可能会进一步帮助您

于 2013-01-09T04:41:16.407 回答
1

我会确保你的模型上有 [Serializable] 属性。另外,请确保您的请求指定了 party={myjson} 。

于 2013-01-08T22:26:27.697 回答
1

您只需要在控制器中声明一个类“SearchParty”,即可在控制器中检索强类型对象而无需序列化。

public class SearchParty  
{
 public string party { get; set; }
}

public ActionResult SearchInitiated(SearchParty party)
{
 code here....
}

请也检查此链接

于 2013-01-09T04:26:31.437 回答
1

我通过修改 javascript ajax 调用解决了我的错误:

 SearchPost(URL, JSON.stringify( {
            'connectorId': '@Model.ConnectorId',
            'sessionId': '@Model.SessionId',            
            'party' :   currentSelectedParty  
        }))

我需要对在 ajax 调用中发送的整个数据对象进行字符串化,而不仅仅是“派对”对象

于 2013-01-11T17:45:42.650 回答