目前正在使用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,与Gecko一样)
Chrome / 24.0.1312.52 Safari / 537.17
X-请求-随着:XMLHttpRequest的
表单数据视图
而connectorID:1
的sessionId:97e2d8b2-be9e-4138-91ed-42ef9c6a2cd6
方: { “标签”:空, “PartyIdentifier”: “1”, “地址”:空, “地址2”:空, “BUSINESSNAME”: “”, “CellPhoneNumber”:空, “到岸价格”: “”, “城市” :空, “国家”:空, “出生日期”:空, “EMAILADDRESS”:空, “EmploymentTitle”:空, “EmployerAddress”:空, “EmployerAddress2”:空, “EmployerCity”:空, “EmployerName”:空“EmployerPhoneNumber”:空, “EmployerState”:空, “EmployerZip”:空, “传真”:空, “名字”: “TEST”, “姓氏”: “用户”, “MailingAddress”:空, “MailingAddress2” :空, “MailingCity”:空, “MailingState”:空, “MailingZip”:空, “中间名”:空, “******中国”:空, “国家”:空, “天”: “1111111”, “WorkPhoneNumber” :NULL, “邮编”:空}
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字符串是有效的,因为它在第二个代码片段中工作,并且值正在调用中传递。我还能错过什么?
答案 0 :(得分:3)
试试这个。
public class SearchParty
{
public string party { get; set; }
}
[HttpPost]
public ActionResult SearchInitiated(SearchParty party)
{
....
return View();
}
答案 1 :(得分:2)
可能你需要将jQuery.ajax的traditional
道具设置为true才能实现traditional style of param序列化
在文档就绪之后立即将下面的代码放在
之后$(function(){
jQuery.ajaxSettings.traditional = true;
});
This如此问题可能对您有所帮助
答案 2 :(得分:1)
我会确保你的模型上有[Serializable]属性。另外,请确保您的请求指定party = {myjson}。
答案 3 :(得分:1)
您只需在控制器中声明一个类'SearchParty',即可在控制器中检索强类型对象而无需序列化。
public class SearchParty
{
public string party { get; set; }
}
public ActionResult SearchInitiated(SearchParty party)
{
code here....
}
请检查此link
答案 4 :(得分:1)
我通过修改javascript ajax调用来解决我的错误:
SearchPost(URL, JSON.stringify( {
'connectorId': '@Model.ConnectorId',
'sessionId': '@Model.SessionId',
'party' : currentSelectedParty
}))
我需要对ajax调用中发送的整个数据对象进行字符串化,而不仅仅是&#39; party&#39;对象