1

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を除くすべての値をうまく入力できます

4

1 に答える 1

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 をコメントアウトし、これをその下に配置するだけで、コントローラー側でモデルを埋めました。

于 2013-01-22T20:56:38.730 に答える