我有一些代码,我正在尝试使用Ajax post将Viewmodel发送回控制器。如果我以一种方式编写代码,它会正确传递,另一种方式是在viewmodel中返回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);
});
});
});
返回null值的方式:
$(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
}
编辑 - 根据要求,这里是EventViewModel结构
[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; }
}
任何人都知道为什么会发生这种情况?是否有限制回家可以通过这种方式发送到控制器 - 这是一个非常复杂的视图模型,所以想知道是否可能与它有关。
由于
答案 0 :(得分:2)
像这样:
$(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")';
以避免硬编码网址答案 1 :(得分:1)
家庭是否有限制可以通过这种方式发送到控制器 - 这是一个非常复杂的视图模型,所以想知道这是否与它有关。
是的,它有1000个HTTP收集密钥,您可以在web.config中自行配置。首先尝试将值设置为4000,然后根据需要稍微降低一点。试试这个:
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="4000" />
</appSettings>
答案 2 :(得分:0)
使用它 http://api.jquery.com/jQuery.post/
$。AJAX({ 类型:'POST', url:url, 数据:数据, 成功:成功, dataType:dataType });
,我的意思是不是速记Axaj Call。您有“成功”,“错误”,“已完成”等选项,可以隔离问题。
答案 3 :(得分:0)
我在ASP.NET MVC上遇到了相同的错误。在您的模型上,您将ConvertEmptyStringToNull = false
放在模型的属性属性中:
[DisplayFormat(ConvertEmptyStringToNull = false)]
E.g。
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