2010-02-17 13 views
5

Từ điển thông số chứa mục nhập rỗng cho tham số 'appId' của loại không thể null 'System.Int32' cho phương thức 'System.Web.Mvc .ContentResult CheckForInstaller (Int32) 'trong' HLIT_TicketingMVC.Controllers.TicketController '. Tham số tùy chọn phải là loại tham chiếu, loại có thể không có giá trị hoặc được khai báo là tham số tùy chọn.

function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
    type:'POST', 
    url:url, 
    data:message, 
    contentType: 'application/json; charset=utf-8', 
    dataType: 'json', 
    success:successFunc, 
    error:errorFunc 
    }); 
}; 

Đối tượng dữ liệu được xây dựng như sau:

var message={"appId":application.val()}; 

Tôi cũng đã thử một chuỗi jsonified:

var message="{'appId':"+application.val()+"}"; 

var message="{'appId':'"+application.val()+"'}"; 

Tôi xác nhận rằng thông điệp đang đi qua với một pr giá trị int hoạt động trước khi cố gắng đăng. Chuột lên debugger gần đây nhất cho thấy: {appId="6"}

Phương pháp chữ ký trên bộ điều khiển là:

public ContentResult CheckForInstaller(int appId) 

Khi tôi loại bỏ các tham số từ các chữ ký phương pháp, nó nhấn breakpoint bên trong, vì vậy nó là một trong hai chữ ký cần thuộc tính của một số loại, hoặc tin nhắn không được xây dựng đúng cách tôi tin.

+0

bạn có nhận được bất kỳ kết quả nào khi bạn thay đổi int thành chuỗi không: nội dung công cộngResult CheckForInstaller (String appId)? – Pbirkoff

+0

Đối tượng ứng dụng đó là gì? Bạn có chắc nó hoạt động như mong đợi không? –

+0

@ çağdaş - có khi tôi di chuột qua kết quả, nó cho thấy giá trị tôi mong đợi. @ Pbirkoff - Tôi đã không thử điều đó nhưng tìm thấy vấn đề, trả lời dưới đây được chấp nhận. – Maslow

Trả lời

9

Remove này:

contentType: 'application/json; charset=utf-8', 

MVC sẽ không phân tích cú pháp JSON thành một int. Bạn muốn giá trị mặc định là application/x-www-form-urlencoded.

+0

+1 tuyệt vời nó hoạt động – Maslow

+0

Trong những trường hợp như vậy, chúng ta phải xác định một tuyến đường đặc biệt cho phương thức hành động sẽ được gọi? hoặc nó tự động bị ràng buộc? –

+0

@LordCover: Không, bạn không cần tuyến đường đặc biệt. Nó bị ràng buộc giống như bất kỳ hình thức nào khác. –

2

tôi nghĩ rằng nó có thể rằng bạn đang gửi json với bộ điều khiển thử này

function SubmitAjax(url, message, successFunc, errorFunc) { 
    $.ajax({ 
    type:'POST', 
    url:url, 
    data:"appId=" + application.val(),//not sure where you get the value from in your current code 
    dataType: 'json', 
    success:successFunc, 
    error:errorFunc 
    }); 
}; 
+0

Bạn nói đúng về JSON, nhưng 'dữ liệu' của anh ta đã đúng. –

+0

Trong những trường hợp như vậy, chúng ta phải xác định một tuyến đường đặc biệt cho phương thức hành động sẽ được gọi? hoặc nó tự động bị ràng buộc? –

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