2017-10-12 82 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只是[object]類型,你不能使用任何searchParam對象的值。

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

我認爲它不能在POST請求中傳遞多個參數與複雜的json對象。

如何獲取傳遞給MVC控制器的操作方法的JSON數據,以便SearchParam Json數據轉換爲JObject它自己。即應該使用初始的第一個Action方法簽名,而不使用任何主要的方法簽名更改。

很少觀察:

  1. 如果我接通上述操作方法作爲API控制器API;它開始工作,但說你需要按照下面的方法簽名。下面的方法不適用於MVC控制器。不知道爲什麼?但是,由於某種原因,我不能使用API​​控制器。

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

謝謝!

+0

數據:JSON.stringify(json),正在將數據轉換爲字符串。我建議你刪除dataType:「json」,在阿賈克斯params –

回答

2

最好不要爲此使用JOBject。相反,它更實用和強烈建議創建和使用型號。 MVC Web API將隨後將傳入的JSON綁定到Model對象,全部免費。

例子:

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

謝謝彼得。它接近我所期待的。 – 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 

非常感謝!

相關問題