2012-12-19 32 views
6

Tôi đang phát triển trên ASP.NET MVC4. Tôi có hai yêu cầu JSON trong mã của tôi gửi một đối tượng JSON. Một trong số họ hoạt động tốt, người kia vượt qua một null vì lý do nào đó. Bất kỳ ý tưởng?Yêu cầu JSON tương tự nhưng một gửi đối tượng null

Lưu ý: trong cả hai trường hợp, yêu cầu trên thực tế đến được bộ điều khiển dự định. Nó chỉ là thứ hai vượt qua một NULL, thay vì đối tượng dân cư độc đáo của tôi.

javascript làm việc:

$('#btnAdd').click(function() { 
      var item = { 
       Qty: $('#txtQty').val(), 
       Rate: $('#txtRate').val(), 
       VAT: $('#txtVat').val() 
      }; 

      var obj = JSON.stringify(item); 
      $.ajax({ 
       type: "POST", 
       url: "<%:Url.Action("AddToInvoice","Financials")%>", 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       data: obj, 
       success: function (result) { 
        alert(result);      
       }, 
       error: function (error) { 
        //do not add to cart 
        alert("There was an error while adding the item to the invoice."/* + error.responseText*/); 
       } 
      }); 
     }); 

điều khiển hành động làm việc:

[Authorize(Roles = "edit,admin")] 
public ActionResult AddToInvoice(InvoiceItem item) 
{ 
    return Json(item); 
} 

javascript mà vượt qua một đối tượng NULL:

$('#btnApplyDiscount').click(function() { 
      var item = { user: $('#txtAdminUser').val(),password: $('#txtPassword').val(), isvalid: false }; 

      var obj = JSON.stringify(item); 
      alert(obj); 
      $.ajax({ 
       type: "POST", 
       url: "<%:Url.Action("IsUserAdmin","Financials")%>", 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       data: obj, 
       success: function (result) { 
        if (result.isvalid) 
        { 
         //do stuff 
        } 
        else 
        { 
         alert("invalid credentials."); 
        } 
       }, 
       error: function (error) { 
        //do not add to cart 
        alert("Error while verifying user." + error.responseText); 
       } 
      }); 

     }); 

điều khiển hành động tiếp nhận một đối tượng null:

[Authorize(Roles = "edit,admin")] 
    public ActionResult IsUserAdmin(myCredential user) 
    { 
     //validate our user 
     var usercount = (/*some LINQ happening here*/).Count(); 
     user.isvalid = (usercount>0) ? true : false; 
     return Json(user); 
    } 

UPDATE: InvoiceItem

public partial class InvoiceItem 
{ 
    public Guid? id { get; set; } 
    public string InvCatCode { get; set; } 
    public string Description { get; set; } 
    public decimal Amount { get; set; } 
    public decimal VAT { get; set; } 
    public int Qty { get; set; } 
    public decimal Rate { get; set; } 
    public Nullable<decimal> DiscountAmount { get; set; } 
    public string DiscountComment { get; set; } 
    public Nullable<bool> IsNextFinYear { get; set; } 
    public Nullable<System.DateTime> ApplicableFinYear { get; set; } 
} 

myCredential:

public partial class myCredential 
{ 
    public string user  { get; set; } 
    public string password { get; set; } 
    public bool? isvalid { get; set; } 
} 

đường giá trị:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

Firebug cho thấy mục là một đối tượng JSON, như mong đợi. Cũng là một obj "được xâu chuỗi". Gỡ lỗi mã phía máy chủ cho thấy tham số myCredential là null.

+0

đâu InvoiceItem và myCredential? Ngoài ra định nghĩa tuyến đường của bạn. – roryf

+0

Máy chủ thực sự có nhận được gì không? Những gì được sended trong firebug? Giá trị tuyến đường của bạn nói gì? – iappwebdev

Trả lời

1

thử này ... cho mục đích thử nghiệm:

thay đổi này:

public ActionResult IsUserAdmin(myCredential user) 

cho việc này:

public ActionResult IsUserAdmin(myCredential item) 
+2

Nếu công trình này, tôi sẽ thực sự tức giận. CẬP NHẬT: Nó thực sự đã hoạt động. Tôi đã đi Super-saiyan trong mười phút tốt. –

+0

Thú vị phải không? –

+0

Thú vị là một từ. Tôi có thể nghĩ đến người khác ... Cảm ơn sự giúp đỡ. –

6

Bạn không cần phải xâu chuỗi đối tượng vì jQuery sẽ thực hiện việc này cho bạn. Đoán của tôi sẽ là một cái gì đó sự xâu chuỗi (nếu đó là một từ) đang làm là gây nhầm lẫn cho ModelBinder. Hãy thử điều này:

var obj = { 
    'user': $('#txtAdminUser').val(), 
    'password': $('#txtPassword').val(), 
    'isvalid': false 
}; 

$.ajax({ 
    data: obj, 
    // rest of your settings... 
}); 
+0

Thử cách này ném ngoại lệ "nguyên thủy JSON không hợp lệ: người dùng". người dùng là tài sản được gọi là 'người dùng'. –

+0

Thử đặt dấu ngoặc kép quanh các tên chính - Tôi đã cập nhật câu trả lời của mình. –

+0

đã thử cả dấu ngoặc đơn và dấu ngoặc kép. Không may mắn. gửi đối tượng thực sự ném ngoại lệ nguyên thủy không hợp lệ. Chuỗi kết quả trong đối tượng null như trước. Phần tồi tệ nhất là tôi thực sự đã sao chép và dán mã JSON từ công việc sang chức năng không hoạt động. –

Các vấn đề liên quan