在 jQuery 和 MVC Controller Actions 之间传递非结构化 JSON
本文关键字:结构化 JSON 之间 Actions jQuery MVC Controller | 更新日期: 2023-09-27 18:35:36
有很多关于MVC模型绑定的有用信息。我的问题源于这样一个事实,即我试图避免在我的 MVC 应用程序中创建强类型数据,因为它主要需要充当数据路由器。
基本上,我在页面上有一组字段,带有一个类"input",我可以收集jQuery('.input')
,迭代并填充到javascript对象中。然后,我将其发送到我的 ASP.NET MVC 控制器:
var inputData = my_serialize( $('input');
$.ajax({
type:'POST',
url: '/acme/Ajax/CaptureInput',
dataType: "json",
data: { inputData: JSON.stringify(inputData) },
success: Page_Response_RegisterAndDeposit,
error: Page_AjaxError
});
在 C# 方面,我有
public JsonResult CaptureInput(string inputDataAsJsonString)
{
JavaScriptSerializer JSON = new JavaScriptSerializer();
object inputData = JSON.DeserializeObject(inputDataAsJsonString);
这似乎是一种浪费的间接级别,我更愿意将数据作为 contentType:application/json 传递,并让 CaptureInput 接受object
或IDictionary
甚至dynamic
。
您可以使用 serializeArray 方法。假设您有一个包含任何类型的输入元素的表单,并且您想要调用以下控制器操作:
public ActionResult CaptureInput(Dictionary<string, string> values)
{
...
}
以下是您可以继续操作的方法:
<script type="text/javascript">
var values = $('form').serializeArray();
var data = {};
$.each(values, function (index, value) {
data['[' + index + '].key'] = value.name;
data['[' + index + '].value'] = value.value;
});
$.ajax({
url: '@Url.Action("CaptureInput")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(data),
success: function (result) {
alert('success');
}
});
</script>
不完全是你想要的,但也许这个问题的解决方案会给你一个部分解决方法,允许你绑定到一个带有嵌入式字典的简单包装对象。 它甚至可能允许直接绑定到字典。不确定。。。您可能还需要在 $.ajax 调用中显式设置 json ContentType 标头
"IDictionary<>的JSON模型绑定,在 ASP.NET MVC/WebAPI中"