2017-10-12 8 views
1

フォーマットやスペルが間違っています。私はこの記事を急いで書いています。 :)JsonデータをMVCコントローラに渡す - アクションメソッドのJObjectパラメータ

jsonデータをシンプルコントローラ(MVCコントローラ)のアクションメソッドに渡しています。以下は参考のためのサンプルコードです。

JSコード:

するvar JSON = {IsInit:真、SearchParam:{タイプ: "XX"、名称: "XX"、ソート: ""}}。

Nx$(document).ready(function() { 

     Nx$.ajax({ 
      async: true, 
      contentType: "application/json; charset=utf-8", 
      type: "POST", 
      url: "Home/Data", 
      dataType: "json", 
      data: JSON.stringify(json), 
      success: function (msg) { 
       alert('success'); 
      }, 
      error: function (jqxhr, textStatus, error) { 
       alert('fail'); 
      } 
     }); 

アクションメソッド:今

<HttpPost> 
     <Route("Data")> 
     Function GetData(ByVal IsInit As Boolean, ByVal SearchParam As Newtonsoft.Json.Linq.JObject) As ActionResult 
      Return Nothing 
     End Function 

、上記の行動は全く呼び出しません。以下のコードを使用すると、呼び出しが行われますが、SearchParamは[オブジェクト]型のため、searchParamオブジェクトの値は使用できません。

<HttpPost> 
    <Route("Data")> 
    Public Function GetData(ByVal IsInit As Boolean, ByVal SearchParam As Object) As Object 
     Return Nothing 
    End Function 

複雑なjsonオブジェクトのPOSTリクエストで複数のパラメータを渡すことはできないと思います。

JSONデータをMVCコントローラのアクションメソッドに渡して、SearchParam JsonデータをJObjectに変換する方法を教えてください。すなわち、最初の第1のアクションメソッドシグネチャは、主要なシグネチャの変更がない場合に使用されるべきである。

いくつかの観察:私はAPIコントローラにAPIとしてアクション・メソッドの上になった場合

  1. 。それは動作を開始しますが、以下のメソッドシグネチャに従う必要があると言いました。以下のアプローチはMVCコントローラでは機能しません。なぜ分からないのですか?しかし何らかの理由で、私はAPIコントローラと一緒に行くことができません。

    <HttpPost> 
        <Route("Data")> 
        Function GetData(ByVal req As Newtonsoft.Json.Linq.JObject) As ActionResult 
         Return Nothing 
        End Function 
    

感謝!!

+0

data:JSON.stringify(json)は、Dataをstringに変換しています。私はデータ型を削除することをお勧めします: "json"、ajax params –

答えて

2

このためにJOBjectを使用しない方が良い。代わりに、モデルクラスを作成して使用する方がはるかに実用的であり、強く推奨されます。 MVC Web APIは、着信JSONをModelオブジェクトにバインドします。これらはすべて無料です。

例:ここで私は1つのクラスにすべてを積ま

Public Class MyData 
    Public Property IsInit As Boolean 
    Public Property Type As String 
    Public Property Name As String 
    Public Property Sort As String 
End Class 

注意。あなたは残りの部分からIsInit別のを維持したいなら、あなたはこのようにそれを分割することができます:

Public Class Param 
    Public Property Type As String 
    Public Property Name As String 
    Public Property Sort As String 
End Class 

Public Class MyData 
    Public Property IsInit As Boolean 
    Public Property SearchParam as Param 
End Class 

次に、このようなあなたのアクションメソッドを変更:

Function GetData(<FromBody()> ByVal data As MyData) As ActionResult 
    ... 
End Function 

最後に、あなたはおそらくあなたにdata: jsonを使用する必要があります呼び出し、JSON.stringify()を呼び出すことなく。

+0

Thanks Peter。それは私が探していたものに近いものでした。 – user2761594

0

ありがとうございます!!あなたのコメントは私に方向性を与えました。 JSONデータをDictionaryオブジェクトにラップするために使用するコードスニペットです。ここでは、JObjectを使用せず、Modelオブジェクトに頼っているというあなたの要点を理解しています。しかし何らかの理由で。私は他のエンドポイントから動的なJSONの性質のためJSONを取得するために辞書オブジェクトを使用する必要があります。

Public Class MyData 
      Public Property IsInit As Boolean 
      Public Property SearchParam As Dictionary(Of Object, Object) 
     End Class 

ありがとうございます!

関連する問題