Asp.net mvc 序列化表单GetJSON返回空模型
我有一个表单,我正试图发送一个GetJSON调用。当我到达控制器时,绑定到视图的模型是一个空值。当我得到一个empy对象而不是一个null值时,我在处理返回数据之前遇到了一些问题。下面是我用来发送表单的代码Asp.net mvc 序列化表单GetJSON返回空模型,asp.net-mvc,asp.net-mvc-3,jquery,serialization,model-binding,Asp.net Mvc,Asp.net Mvc 3,Jquery,Serialization,Model Binding,我有一个表单,我正试图发送一个GetJSON调用。当我到达控制器时,绑定到视图的模型是一个空值。当我得到一个empy对象而不是一个null值时,我在处理返回数据之前遇到了一些问题。下面是我用来发送表单的代码 var cqvdata = $("form").serialize(); $.getJSON('@Url.Action("GetEmailByAdvanced", "CustomerEmails")', { cqv: cqvdata }, function (contacts) {
var cqvdata = $("form").serialize();
$.getJSON('@Url.Action("GetEmailByAdvanced", "CustomerEmails")', { cqv: cqvdata }, function (contacts) {
var emails = "";
$.each(contacts, function (index, contact) {
$('#BCCText').tagit('createTag', contact.Email)
});
return false;
});
下面是我在控制器端的内容
public JsonResult GetEmailByAdvanced(MassEmailViewModel cqv)
{
}
以下是我将参数转换为字符串时得到的结果
"EmailFromAddressID=1&ToAddresses=&CCAddresses=bclairmont%40harr.com&BCCAddresses=adunn%40harr.com&Subject=&Body="
下面是MassEmailViewModelClass和所有子类
public class MassEmailViewModel
{
public MassEmailViewModel()
{
ComplexQuery = new CustomerQueryViewModel();
}
public int EmailFromAddressID { get; set; }
public CustomerQueryViewModel ComplexQuery { get; set; }
public string ToAddresses { get; set; }
public string CCAddresses { get; set; }
public string BCCAddresses { get; set; }
public string Subject { get; set; }
[AllowHtml]
public string Body { get; set; }
}
public class CustomerQueryViewModel
{
public CustomerQueryViewModel()
{
Products = new List<CustomerProductQueryProduct>();
Details = new List<CustomerQueryDetail>();
}
public Boolean IncludeOnAll { get; set; }
public Boolean ExcludeOnAll { get; set; }
public List<CustomerProductQueryProduct> Products { get; set; }
public List<CustomerQueryDetail> Details { get; set; }
}
public class CustomerProductQueryProduct
{
public CustomerProductQueryProduct()
{
ProductDetails = new List<CustomerProductQueryProductDetail>();
ProductVersions = new List<ProductVersion>();
}
public ProductType ProductType { get; set; }
public Boolean Exclude { get; set; }
public Boolean Include { get; set; }
public int VersiondID { get; set; }
public List<CustomerProductQueryProductDetail> ProductDetails { get; set; }
public List<ProductVersion> ProductVersions { get; set; }
}
public class CustomerProductQueryProductDetail
{
public ProductTypeDetail ProductDetail { get; set; }
public Boolean Exclude { get; set; }
public Boolean Include { get; set; }
public string Value { get; set; }
public string Value2 { get; set; }
}
public class CustomerQueryDetail
{
public string Description { get; set; }
public string Type { get; set; }
public Boolean Exclude { get; set; }
public Boolean Include { get; set; }
public string Value { get; set; }
public string Value2 { get; set; }
}
公共类masseEmailViewModel
{
公共MassEmailViewModel()
{
ComplexQuery=new CustomerQueryViewModel();
}
public int EmailFromAddressID{get;set;}
公共CustomerQueryViewModel ComplexQuery{get;set;}
公共字符串到地址{get;set;}
公共字符串ccaddress{get;set;}
公共字符串{get;set;}
公共字符串主题{get;set;}
[allowtml]
公共字符串体{get;set;}
}
公共类CustomerQueryViewModel
{
公共客户查询视图模型()
{
产品=新列表();
详细信息=新列表();
}
公共布尔值IncludeOnAll{get;set;}
公共布尔ExcludeOnAll{get;set;}
公共列表产品{get;set;}
公共列表详细信息{get;set;}
}
公共类CustomerProductQueryProduct
{
公共CustomerProductQueryProduct()
{
ProductDetails=新列表();
ProductVersions=新列表();
}
公共ProductType ProductType{get;set;}
公共布尔排除{get;set;}
公共布尔包含{get;set;}
public int versionId{get;set;}
公共列表ProductDetails{get;set;}
公共列表ProductVersions{get;set;}
}
公共类CustomerProductQueryProductDetail
{
public ProductTypeDetail ProductDetail{get;set;}
公共布尔排除{get;set;}
公共布尔包含{get;set;}
公共字符串值{get;set;}
公共字符串值2{get;set;}
}
公共类CustomerQueryDetail
{
公共字符串说明{get;set;}
公共字符串类型{get;set;}
公共布尔排除{get;set;}
公共布尔包含{get;set;}
公共字符串值{get;set;}
公共字符串值2{get;set;}
}
唯一没有返回的是序列化中的ComplexQuery,因为我使用的是JQuery对话框,所以它将这些元素从表单中删除。我想我会得到一个MassEmaikViewModel,除了ComplexQuery,所有的vlaues都有一个空值,但是我只得到了一个空值,因为参数从未初始化过
你知道是什么导致了这一切吗
还有一件事,我不知道这是否有助于给任何人提供任何见解,但我可以从表单中发布,并将MassEmailViewModel作为帖子中的参数,它可以很好地填充除ComplexQuery之外的所有值。经过大量的尝试和错误,我找到了它。看起来GetJSON无法处理数据的传递。为了正确获取信息,我所做的是更改为AJAX get调用。我将在下面发布代码
$.ajax({
url: '@Url.Action("GetEmailByAdvanced", "CustomerEmails")',
type: 'GET',
data: cqvdata,
success: function (data) {
//called when successful
var emails = "";
$.each(contacts, function (index, contact) {
$('#BCCText').tagit('createTag', contact.Email)
});
return false;
},
error: function (e) {
//called when there is an error
//console.log(e.message);
}
});
我使用了GetJSON中的确切数据。事实上,我注释了GetJSON,并将其放在下面,然后在控制器端填写了我的模型。经过大量的尝试和错误,我找到了它。看起来GetJSON无法处理数据的传递。为了正确获取信息,我所做的是更改为AJAX get调用。我将在下面发布代码
$.ajax({
url: '@Url.Action("GetEmailByAdvanced", "CustomerEmails")',
type: 'GET',
data: cqvdata,
success: function (data) {
//called when successful
var emails = "";
$.each(contacts, function (index, contact) {
$('#BCCText').tagit('createTag', contact.Email)
});
return false;
},
error: function (e) {
//called when there is an error
//console.log(e.message);
}
});
我使用了GetJSON中的确切数据。事实上,我注释掉了GetJSON并将其放在下面,然后在控制器端填充了我的模型