2013-08-07 127 views
2

我試圖通過使用ajax JQuery我的模型值從視圖傳遞到控制器。在我的控制器中,該模型顯示爲null傳遞模型從視圖到控制器與JQuery的Ajax

控制器已經從ajax方法調用,但問題是控制器中的對象顯示爲null

這是模型的結構簡單:

public class Invoice 
{ 
    public Invoice(InvoiceHeader invHeader, List<InvoiceItems> InvItmem) 

    { 
     this.invHeader = invHeader; 
     this.InvItmem = InvItmem; 
    } 

    public InvoiceHeader invHeader { get; private set; } 
    public List<InvoiceItems> InvItmem { get; private set; } 

} 

這是控制器的結構:

[HttpPost] 
public ActionResult InsertItems(List<Invoice> invoice) 
{ 
    //List<InvoiceItems> asd = new List<InvoiceItems>(); 
    //asd = invoice.(); 

    return Json(true, JsonRequestBehavior.AllowGet); 
} 

這是查看:

@model BeetaTechModel.Invoice 

@{ 
    ViewBag.Title = "Index"; 
    var val = Json.Encode(Model); 
} 

<h2>Index</h2> 

    <script type="text/javascript"> 
     $(document).ready(function() { 

      $("#btnSubmit").click(function() { 

       // var val = Json.Encode(Model); 

       var check = @Html.Raw(val); 

       $.ajax({ 
        type: 'POST', 
        url: "Invoice/InsertItems", 
        data: '{info:' + JSON.stringify(check) + '}' , 
        contentType: 'application/json; charset=utf-8', 
        dataType: "json", 
        success: function (data) { 
         alert(data);   
        } 
       }); 
      }); 
     }); 
    </script> 

@{Html.RenderPartial("InvoiceHeader", Model.invHeader);} 

@{Html.RenderPartial("InvoiceItems", Model.InvItmem);}   

<input type="submit" id="btnSubmit" value="Log In" /> 
+0

反序列化什麼是AJAX的成功過程中驚動了數據? – Aditya

回答

6

你有4個問題與您的代碼。

  • 第一個是在你的AJAX調用,它必須是這樣的:

    $.ajax({ 
        url: 'Invoice/InsertItems', 
        type: 'POST', 
        data: JSON.stringify(check), 
        contentType: 'application/json; charset=utf-8', 
        success: function (data) { 
         alert(data); 
        } 
    }); 
    
  • 的第二個問題是,您訂閱的.click事件提交按鈕不取消的默認操作這個按鈕。因此,如果此按鈕位於表單內,那麼當您單擊它時,瀏覽器會將表單發送到服務器並重定向到表單的操作,而不會讓您的AJAX調用執行。因此,請確保您要取消該按鈕的默認操作:

    $("#btnSubmit").click(function (e) { 
        e.preventDefault(); 
    
        ... your AJAX call comes here 
    }); 
    
  • 第三個問題是,你的Invoice模型沒有一個默認的(無參數)構造函數這意味着你可以不使用它作爲參數傳遞給控制器動作而不編寫自定義模型綁定器,因爲默認模型綁定器不知道如何實例化它。

  • 而第四個問題是,無論你Invoice模型invHeaderInvItmem屬性沒有公共setter方法這意味着JSON序列化將無法設置它們的值。因此,請確保您有固定的發票型號:

    ​​
+0

和第四在發佈的數據中的成員被稱爲'信息',而參數被稱爲'發票' –

+0

是的,很好的捕獲。 –

0
  1. data: '{info:'不匹配型號名稱:public ActionResult InsertItems(List<Invoice> invoice)
  2. 也許你需要的模式進行適當的反序列化的默認構造函數。
  3. 檢查你的Ajax的數據可能在List<Invoice>
相關問題