我有一个我试图通过GetJSON调用发送的表单。当我到达Controller时,与视图绑定的模型是空值。当我得到一个empy对象但从来没有空值时,我在处理返回数据之前遇到了问题。以下是我用来发送表单的代码
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; }
}
唯一没有返回的是序列化中的我的ComplexQuery,因为我使用的是JQuery对话框,因此它将这些元素从表单中取出。我认为我会得到一个包含所有值的MassEmaikViewModel但是ComplexQuery并且有一个null,但我只是得到一个null,因为参数从来没有被初始化。
关于可能导致这种情况的任何想法?
另一件事,我不知道这是否有助于任何人有任何见解,但我可以从表单发布并将MassEmailViewModel作为帖子中的参数,它可以正常填写所有值,除了ComplexQuery
答案 0 :(得分:1)
经过大量的反复试验,我发现了这一点。似乎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并将其放在它下面,我在控制器端填写了我的模型。