2016-11-24 3 views
0

私はこの問題に関してほとんどの答えを試してみたが、この問題に対処していないと言って始めたいと思います。JSONはMVCアクションへのAJAXポストを行うときにオブジェクトに逆シリアル化されません

jQuery ajaxリクエスト経由でコントローラのアクションに投稿するときに問題があります。

これは私のJSONオブジェクトです:

var service = { 
     ServiceID: $('#ServiceID').val(), 
     ServiceName: $('#ServiceName').val(), 
     ServiceActive: $('#ServiceActive').val(), 
     ServiceDescriptionShort: $('#ServiceDescriptionShort').val(), 
     ServiceDescription: $('#ServiceDescription').val()    
    }; 

これが私のクラスである:

public class ServiceJson 
{ 
    public int ServiceID 
    { 
     get; 
     set; 
    } 

    public string ServiceName 
    { 
     get; 
     set; 
    } 

    public bool ServiceActive 
    { 
     get; 
     set; 
    } 

    public string ServiceDescriptionShort 
    { 
     get; 
     set; 
    } 

    public string ServiceDescription 
    { 
     get; 
     set; 
    } 
} 

これは私の行動である(それは今のところ何もしませんが、それはポイントではありません):

[HttpPost] 
[Route("edit")] 
[ValidateJsonAntiForgeryToken] 
public JsonResult Edit(ServiceJson service) 
{ 
    return Json("", JsonRequestBehavior.AllowGet); 
} 

最後に、これは私のAjaxリクエストです。

$.ajax(
{ 
    type: 'POST', 
    url: '@Url.ActionWithoutData("edit", "service")', 
    data: JSON.stringify(service), 
    headers: { 
     "__RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() 
    }, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    processData: false, 
    contentType: false, 
    success: function (responseData) { 
     $('#ServiceID').val(responseData.ServiceID); 
     $.snackbar({ content: 'Successfully saved.' }); 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     $('#errorMessage').html(xhr.responseJSON.Message); 
     $('#error').modal('toggle'); 
    } 
}); 

私の問題は、このJSONオブジェクトが自分のクラスにシリアル化されていないことです。明らかに名前が対応しています。私はただの名前を渡す(ともちろんそれに対応するアクションパラメータを変更する)ような単純なパラメータを試してみたので、些細なことを忘れていると確信しています。リクエストオブジェクトでデータを受け取っているが、オブジェクトにデシリアライズされていないことがわかります。

ブラウザでは、オブジェクトが正しく渡されていることもわかります。

enter image description here

ヘルプ!

+0

'data:service 'を削除し、' contentType:' application/json; charset = utf-8 '、 '、' processData:false、 'contentType:false、' –

+0

アクションパラメータのServiceJsonサービスがNULLですか? –

+0

アクションなしでデータを処理するには –

答えて

1

は以下これらを削除し、あなたが行くように良いことがあります。

データ型: 'JSON'、
PROCESSDATA:偽、
のcontentType:偽、

PROCESSDATAはあなたにこの場合はすべての問題を与えるべきではありません。

dataTypeと」あなたは、文字列ではなくJSONを送っているので、 『JSON』は間違っているJSON.Stringify()の呼び出しに注意してください

。。 『のcontentType:偽は』ここで私に送ることはありません。 p

+0

これはこのトリックでした。 MVCに変換されます。 – Rob

+0

'dataType '' json''は間違っていないし、保持することができます/保持する必要があります - ' dataType'オプションはサーバから受け取ったものを指定し、メソッドはjsonを返します! –

+0

@StephenMuecke JSON形式ですが、 – user1567453

0

デフォルトネットJSONシリアライザを使用している場合は、キャメルケースにパスカルケースからあなたのサービスオブジェクトの命名を変更する必要があります。

var service = { 
    serviceID: $('#ServiceID').val(), 
    serviceName: $('#ServiceName').val(), 
    serviceActive: $('#ServiceActive').val(), 
    serviceDescriptionShort: $('#ServiceDescriptionShort').val(), 
    serviceDescription: $('#ServiceDescription').val()    
}; 
+1

これは当てはまりませんが、命名規則はこの問題とは関係ありません – Rob

関連する問題