我有一些代码,我试图使用 Ajax post 将视图模型发送回控制器。 如果我以一种方式编写代码,它会正确传递,而另一种方式它会在视图模型中返回 null 或 0 值。
工作方式:
$(document).ready(function () {
$(".boxItem").change(function (event) {
var url = "/Search/GetBoxChangeInfo";
$.post(url, @Html.Raw(Json.Encode(Model)), function (data) {
$("#column-1").html(data);
});
});
});
以及返回空值的方式:
$(document).ready(function () {
$(".boxItem").change(function (event) {
var url = "/Search/GetBoxChangeInfo";
$.post(url, { json: @Html.Raw(Json.Encode(Model)) }, function (data) {
$("#column-1").html(data);
});
});
});
我需要以第二种方式使用它,因为我还需要将有关所选值和 ID 的参数传回,因此它看起来像这样:
$(document).ready(function () {
$(".boxItem").change(function (event) {
var str = $(this).attr('id');
var num = $(this).val();
var url = "/Search/GetBoxChangeInfo";
$.post(url, { json: @Html.Raw(Json.Encode(Model)), id : str, selected : num }, function (data) {
$("#column-1").html(data);
});
});
});
顺便说一句,我的控制器看起来像这样:
[HttpPost]
public ActionResult GetBoxChangeInfo(EventViewModel json)
{
//stuff
}
编辑 - 根据要求,这里是事件视图模型结构
[JsonObject(MemberSerialization.OptIn)]
public class EventViewModel
{
public int EventNumber { get; set; }
public List<EventItemsViewModel> EventItems { get; set; }
public List<LocationViewModel> Locations { get; set; }
public int StartLocationID { get; set; }
public bool Outbound { get; set; }
public List<int> SelectedEvents { get; set; }
public List<DurationsViewModel> Durations { get; set; }
}
有人知道为什么会发生这种情况吗? 家是否有限制,可以通过这种方式将很多东西发送到控制器 - 这是一个相当复杂的视图模型,所以想知道这是否与它有关。
谢谢
像这样:
$(document).ready(function () {
$('.boxItem').change(function (event) {
var str = $(this).attr('id');
var num = $(this).val();
var url = '@Url.Action("GetBoxChangeInfo", "Search")';
$.ajax({
url: url,
contentType: 'application/json',
data: JSON.stringify({
json: @Html.Raw(Json.Encode(Model)),
id: str,
selected: num
}),
success: function(data) {
$("#column-1").html(data);
}
});
});
});
注意事项:
-
contentType: 'application/json'
-
JSON.stringify
将对象转换为 JSON 字符串 -
var url = '@Url.Action("GetBoxChangeInfo", "Search")';
避免硬编码网址
家是否有限制,可以通过这种方式将很多东西发送到控制器 - 这是一个相当复杂的视图模型,所以想知道这是否与它有关。
是的,有 1000 个 HTTP 集合密钥,您可以在 web.config 中自行配置。首先尝试将值设置为 4000,然后您可以根据需要将其降低一点。试试这个:
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="4000" />
</appSettings>
使用这个http://api.jquery.com/jQuery.post/
$.ajax({ 类型:"开机自检", 网址:网址, 数据:数据, 成功:成功, 数据类型:数据类型});
,我的意思不是速记 Axaj 呼叫。您可以选择"成功","错误","已完成",并且可以隔离问题。
我在 ASP.NET MVC上遇到了同样的错误。在模型上,您可以ConvertEmptyStringToNull = false
模型属性的属性:
[DisplayFormat(ConvertEmptyStringToNull = false)]
例如
public class Person
{
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Lastname { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Firstname { get; set; }
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Middlename { get; set; }
}
当我在这篇文章中遇到同样的事情时,我记录了:http://www.ienablemuch.com/2011/08/empty-string-is-empty-string.html