MVC4 용으로 작성된 Pluralsight 'EF, MVC, Knockout'과정의 부모 - 자녀를 따라갈 것입니다. 나는 MVC Core에 반대하여 일하고 있으며, POST에서 서버에 대한 모델 바인딩 문제라고 생각하는 것에 대해 머리를 터트 리고 있습니다.MVC 코어에서 KnockoutJS의 모델 바인딩
내 컨트롤러 :
public JsonResult Save(SalesOrderViewModel salesOrderViewModel)
{
if (ModelState.IsValid)
{
var salesOrder = new SalesOrder();
salesOrder.CustomerName = salesOrderViewModel.CustomerName;
salesOrder.PONumber = salesOrderViewModel.PONumber;
_context.SalesOrder.Add(salesOrder);
_context.SaveChanges();
return Json(JsonConvert.SerializeObject(salesOrderViewModel));
}
else
{
return Json(JsonConvert.SerializeObject(ModelState));
}
}
// ModelState이 '유효'오고 있지만 모든 값이 null입니다.
내 아약스 전화 : 아약스 포스트 백에
SalesOrderViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
console.log(self);
self.save = function() {
console.log(self);
console.log(ko.toJSON(self));
debugger;
$.ajax({
url: "/Sales/Save/",
type: "POST",
data: ko.toJSON(self),
headers: {
"contentType": "application/json"
},
success: function (data) {
if (data.salesOrderViewModel)
ko.mapping.fromJS(data.salesOrderViewModel, {}, self);
},
always: function (data) {
console.log(data);
}
});
}
};
CONSOLE.LOG은 다음과 같습니다 FormData에 크롬의 보고서를 확인
postback data: {"SalesOrderId":0,"CustomerName":null,"PONumber":null}
보여줍니다 : {"SalesOrderId":0,"CustomerName":"Steve","PONumber":"PO","MessageToClient":null,"__ko_mapping__":{"ignore":[],"include":["_destroy"],"copy":[],"observe":[],"mappedProperties":{"SalesOrderId":true,"CustomerName":true,"PONumber":true,"MessageToClient":true},"copiedProperties":{}}}
console.logs을 사전에 -post는 'self'대 'ko.toJSON (self)'라는 몇 가지 낯설음을 보여 주지만 KO에 익숙하지 않아서 얼마나 이상한 지 잘 모르겠습니다.
나는 지역 창 ('((Microsoft.AspNetCore.Http.Internal.DefaultHttpRequest)this.Request).Form' threw an exception of type 'System.InvalidOperationException')
에서 본 바인딩 및 오류 메시지를 모델링과 관련된 몇 가지 질문을 본 적이있다.
는
contentType: "application/json"
headers: {
"ContentType": "application/json"
},
에 변경하면 지방 주민에 오류를 제거하지만 동작을 변경하지 않았다. 컨트롤러의 모델은 여전히 Null 값을 표시합니다.
또 다른 대답은 서명에서 '[FromBody]'('[FromForm])를 추가하는 것이 좋습니다. 내게 도움이되지 않았습니다. 당신이 할 수 있기를 바래요!
당신은 아약스 콜백에서 로그 데이터를 콘솔 수 있습니까? 또한 컨트롤러에서 코드를 볼 수 있습니까? –
이것을 시도한 적이 있습니까? public JsonResult Save ([FromBody] SalesOrderViewModel salesOrderViewModel) – Chris
또한 SalesOrderViewModel 코드를 게시하면 양식 데이터 값과 비교하여 모든 변수 이름이 바인딩과 일치하는지 확인할 수 있습니다. – Chris