簡體   English   中英

如何通過 AJAX 將填充的自定義類從 javascript 傳遞到 .NET MVC 應用程序?

[英]How do I get pass a populated custom class from javascript through AJAX to .NET MVC app?

我在 C# 中有以下 .net 類:

public class BusinessModel
{
    public string BlobName { get; set; }
    public string NewName { get; set; }
}

我在我的 MVC Ajax 控制器中有以下操作:

[HttpPost]
public ActionResult DoBusiness(string handle, BusinessModel businessData)
{
    // Do stuff with the business data.
}

首先,我嘗試使用以下 Javascript 代碼來調用它:

var bd = JSON.stringify({ BlobName: "blob", NewName: "new" });

$.ajax({
    type: "POST",
    url: "/Ajax/DoBusiness",
    data: { handle: "MyHandle", businessData: bd },
    success: businessComplete,
    error: businessFailed
});

而本例中,使用fiddler查看,如下是數據在請求上的呈現方式:

handle=MyHandle&businessData=%7B%22BlobName%22%3A%22blob%22%2C%22NewName%22%3A%22new%22%7D

這是以下解碼:

handle=MyHandle&businessData={"BlobName":"blob","NewName":"new"}

但是當我使用 Visual Studio 調試器查看實際傳遞給控制器​​操作的值時,參數“handle”的值為“MyHandle”,但參數“businessData”的值為空。

現在我將 Javascript 代碼更改為如下(僅刪除 JSON.stringify 調用):

var bd = { BlobName: "blob", NewName: "new" };

$.ajax({
    type: "POST",
    url: "/Ajax/DoBusiness",
    data: { handle: "MyHandle", businessData: bd },
    success: businessComplete,
    error: businessFailed
});

在這種情況下,數據(由 fiddler 顯示)在請求中呈現為:

handle=MyHandle&businessData%5BBlobName%5D=blob&businessData%5BNewName%5D=新

這是以下解碼:

handle=MyHandle&businessData[BlobName]=blob&businessData[NewName]=new

在這種情況下,Visual Studio 調試器仍然顯示“handle”按預期設置為“MyHandle”,但不是 null,而是“businessData”參數填充了一個實際實例,但屬性“BlobName”和“ NewName”設置為空。

最后一個問題:我做錯了什么? 我怎樣才能真正在控制器操作中正確填充該類?

編輯響應對可能重復的評論:可能的重復,標題為“通過 POST (ajax) 發送 JSON 數據並從控制器 (MVC) 接收 json 響應”專門解決了如何發送與 MVC 綁定綁定的模型實例。 我的問題更多地與可能受 MVC 綁定的對象無關。 我很好奇如何填充可能任意提供的任何對象。

編輯回應斯蒂芬的評論:這是一個簡化的場景。 現實生活中的實際用例有一組重疊的 Ajax 調用,這個調用是為了響應前一個調用,該調用傳遞了在服務器上構造的任意對象,它希望在后續調用中返回(本示例) . 在我看來,提供完整的現實生活用例會使這個問題過分冗長,所以請原諒簡化,我希望這種解釋將有助於適當地構建上下文。

請參閱 Stephan Muecke 的評論。 他提供了至少目前有效的答案。

暫無
暫無

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

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