gpt4 book ai didi

jquery - MVC3 Json 模型绑定(bind)在发送到服务器时不起作用

转载 作者:行者123 更新时间:2023-12-03 22:59:54 25 4
gpt4 key购买 nike

我在 MVC3 和模型绑定(bind)方面遇到了一个奇怪的问题。当我将 JSON 对象发布到 Controller 时,模型绑定(bind)器根本无法从中创建类型化对象。所有属性都是默认的(即空字符串)

但是,如果我在服务器上创建一个实例,并将其作为 JSON 操作结果发送,则线路上的数据看起来是相同的。

我尝试过

$.ajaxSettings.traditional = true;

没有什么区别

举个例子,如果我发帖

{"RoutineName":"My new routine","Routines":[{"DayName":"Monday","Items":[21,31]}]}

模型绑定(bind)器失败,但来自服务器的数据看起来像

{"RoutineName":"Routine From Code","Routines":[{"DayName":"Monday","Items":[1,2]},{"DayName":"Tuesday","Items":[]}]}

用于生成此内容的 html 看起来像

$('#submitRoutine').click(function () {
var routines = [];
$('.DayName').each(function (index, item) {
var $item = $(item);
var name = $item.html();
var routineItems = [];
$($item.attr('href')).find('.itemId').each(function () {
routineItems.push(parseInt($(this).val(), 10));
});
routines.push({
DayName: name,
Items: routineItems
});
});
var routine = {
RoutineName: $('#routineName').val(),
Routines: routines
};

$.ajaxSettings.traditional = true;
$.post('/Machine/CreateRoutine', JSON.stringify(routine),function (data) {},'json');
});

所以看起来从类型化对象到 JSON 的模型绑定(bind)是可以的,但以其他方式返回则不行。有什么我错过的吗?

模型采用 F# 格式

type RoutineDayViewModel() =
let mutable _name = String.Empty
let mutable _items = new ResizeArray<int>()

member x.DayName with get() = _name and set value = _name <- value
member x.Items with get() = _items and set value = _items <- value

type RoutineViewModel() =
let mutable _name = String.Empty
let mutable _routines = new ResizeArray<RoutineDayViewModel>()

member x.RoutineName with get() = _name and set value = _name <- value
member x.Routines with get() = _routines and set value = _routines <- value

编辑:我还尝试过以下 C# 类并得到相同的结果

 public class RoutineDayViewModel
{
public string DayName { get; set; }
public List<int> Items{ get; set; }
}

public class RoutineViewModel
{
public string RoutineName { get; set; }
public List<RoutineDayViewModel> Routines { get; set; }
}

我还在 global.asax 中添加了以下内容

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory())

谢谢

最佳答案

如果您打算发送 JSON 格式的请求(这就是您使用 JSON.stringify 方法所做的事情),则需要将请求内容类型设置为 application/json 。所以代替:

$.post('/Machine/CreateRoutine', JSON.stringify(routine),function (data) {},'json');

你可以使用:

$.ajax({
url: '/Machine/CreateRoutine',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(routine),
success: function (data) {

}
});

有了这个,您不需要设置 $.ajaxSettings.traditional 也不应该在 Global.asax 中添加任何 JsonValueProviderFactory 因为此提供程序已由ASP.NET MVC 3 中的默认设置。

关于jquery - MVC3 Json 模型绑定(bind)在发送到服务器时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8395404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com