![](/img/trans.png)
[英]How can i pass an array of objects from javascript to asp.net-mvc function through ajax?
[英]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.