GetJSON 呼び出しで送信しようとしているフォームがあります。コントローラーに到達すると、ビューに関連付けられているモデルは null 値です。空のオブジェクトを取得するがnull値を取得しない場合、データを返すことを調整する前に問題がありました。以下は、フォームを送信するために使用しているコードです
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; }
}
JQueryダイアログを使用しているため、シリアル化されたComplexQueryだけが返されないため、これらの要素がフォームから取り出されます。ComplexQuery 以外のすべての値を含む MassEmaikViewModel を取得し、そのための null を取得すると思いますが、引数が初期化されていない場合は null を取得するだけです。
これを引き起こしている可能性のあるアイデアはありますか?
もう1つ、これが誰かに洞察を与えるのに役立つかどうかはわかりませんが、フォームから投稿して、投稿の引数としてMassEmailViewModelを使用すると、ComplexQueryを除くすべての値をうまく入力できます