【发布时间】:2016-10-26 09:06:53
【问题描述】:
我有这个功能在我看来:
function setMessengerState() {
var serviceURL = $("#messenger-set-state-url").val();
var data = {
messengerState: g_messengerState,
};
$.ajax({
type: "POST",
url: serviceURL,
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
console.log("saved");
}
function errorFunc(data, status) {
console.log("failed?");
}
}
这是JSON.stringify(data) 在 Chrome 调试器上的格式:
"{"messengerState":{"IsOpen":true,"ConversationStates":[{"PartnerId":"64c71990-9ddc-4967-8821-a8e5936560a3","IsEnabled":true},{"PartnerId":"64c71990-9ddc-4967-8821-a8e5936560a3","IsEnabled":true}]}}"
这是$("#messenger-set-state-url").val()的值:
"/Messenger/Messenger/SetMessengerState"
控制器方法:
[HttpPost]
public async Task<ActionResult> SetMessengerState(MessengerStateInfo messengerState)
{
var user = User.ApplicationUser();
if (user == null)
return null;
bool success = await MvcApplication.Messenger.SetState(user, messengerState) != null;
return Json(success, JsonRequestBehavior.DenyGet);
}
最后,这是MessengerStateInfo 和ConversationStateInfo:
public class MessengerStateInfo
{
public bool IsOpen { get; set; }
public ICollection<ConversationStateInfo> ConversationStates { get; set; }
public MessengerStateInfo()
{
ConversationStates = new ConversationStateInfo[0];
}
}
public class ConversationStateInfo
{
public string PartnerId { get; set; }
public bool IsEnabled { get; set; }
}
我找不到哪里做错了。帖子永远不会到达控制器方法。我之前尝试过使用基本 (string) 参数,它工作得很好,但它根本无法处理复杂的对象。
【问题讨论】:
-
这一行
data : JSON.stringify(data),应该是data : data, -
我觉得应该是
data =g_messengerState -
这些都不起作用。
-
在
public async Task<ActionResult> SetMessengerState([FromBody]MessengerStateInfo messengerState)中使用[FromBody] -
我的意思是代替
var data = {messengerState: g_messengerState}。应该只是var data = g_messengerState
标签: javascript jquery asp.net asp.net-mvc asp.net-mvc-5