簡體   English   中英

將Json數據傳遞給MVC控制器 - Action Method的JObject參數

[英]Passing Json data to MVC controller - Action Method's JObject Parameter

抱歉格式錯誤或拼寫錯誤。 因為我正急着寫這篇文章。 :)

我將json數據傳遞給簡單控制器(MVC控制器)的動作方法。 以下是示例代碼供參考。

JS代碼:

var json = {IsInit:true,SearchParam:{Type:“xx”,Name:“xx”,sort:“”}};

    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

我認為它無法在復雜的json對象的POST請求中傳遞多個參數。

如何將JSON數據傳遞給MVC控制器的操作方法,以便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 

謝謝 !!

最好永遠不要使用JOBject。 相反,它更實用,強烈建議創建和使用Model類 然后,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

然后像這樣更改您的Action方法:

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

最后,您可能需要在調用中使用data: json ,因此無需調用JSON.stringify()

謝謝彼得! 你的評論給了我指導。 下面的代碼片段用於將JSON數據包裝到Dictionary對象。 在這里,我理解你不使用JObject而是依賴Model對象的觀點。 但出於某種原因; 由於來自其他端點的動態JSON特性,我必須使用字典對象來獲取JSON。

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

非常感謝 !!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM