2011-01-21 34 views
9

Nếu tôi có chức năng sau jQuery (trong một tập tin bên ngoài):ASP.NET MVC 3 - Chúng ta có thể sử dụng mô hình ràng buộc trong các cuộc gọi jQuery AJAX không?

function getResults(field1, field2, field3) { 
    $.get('/Search/GetResults', { id: field1, type: field2, blah: field3 }, function(data) { 
     $('#target').html(data); 
    }); 
} 

Mà về cơ bản có một loạt các lĩnh vực từ mẫu, gửi chúng tới một phương pháp hành động (mà trả về một PartialViewResult), và liên kết với các dẫn đến div mục tiêu.

Dưới đây là phương pháp hành động:

[HttpGet] 
public PartialViewResult GetResults(int id, int type, string blah) 
{ 
    var model = repository.GetResults(id, type, blah); 
    return PartialView("Results", model); 
} 

Có thể sử dụng mô hình ràng buộc ở đây? Ví dụ chúng ta có thể làm điều này:

function getResults(someModel) { 
    $.get('/Search/GetResults', { model: someModel }, function(data) { 
     $('#target').html(data); 
    }); 
} 

Và đây:

[HttpGet] 
public PartialViewResult GetResults(SearchPreferences prefs) 
{ 
    var model = repository.GetResults(prefs); 
    return PartialView("Results", model); 
} 

Hoặc tôi nên xây dựng một đối tượng JSON và vượt qua điều đó không? Hiện nay những giá trị này được lấy thông qua cá nhân jQuery DOM gọi:

var field1 = $('#field1').val(); 
var field2 = $('#field2').val(); 

Mục đích là để giảm/đơn giản hóa mã jQuery. Tôi có tất cả các cuộc gọi để lấy tất cả các giá trị, sau đó tôi cần phải vượt qua tất cả chúng như các tham số.

Lý tưởng nhất là tôi muốn chỉ truyền một đối tượng.

Bất kỳ đề xuất nào?

EDIT: Chỉ cần nhận ra tôi có thể sử dụng mới JSON Mẫu Binding tính năng trong ASP.NET MVC 3. Đọc lên trên đó bây giờ ... (cảm thấy tự do để trả lời trước trong khi chờ đợi) .

Trả lời

4

Trong ASP.NET MVC 3, CÓ! Hãy xem this link, từ TheGu.

ASP.NET MVC 3 bây giờ bao gồm built-in hỗ trợ cho đăng JSON-based thông số từ client-side hoạt Javascript để phương pháp hành động trên máy chủ . Điều này giúp việc chuyển đổi dữ liệu trên máy khách và máy chủ trở nên dễ dàng hơn và xây dựng các giao diện người dùng JavaScript phong phú.

+0

lol, tôi vừa thêm rằng chỉnh sửa và đang đọc cùng một bài đăng khi chúng ta nói. :) – RPM1984

+0

Đẹp ... Tôi cũng làm điều tương tự! – Chaddeus

+0

Bạn cũng có thể muốn xem http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx – Chaddeus

1

Nếu bạn tạo một lớp có chứa thuộc tính bạn đang gửi qua, trình kết nối mô hình mặc định sẽ bắt đầu và liên kết dữ liệu với lớp đó. Trong ví dụ của bạn, tạo ra một lớp:

public class SearchPreferences 
{ 
    public int id { get; set; } 

    public int type { get; set; } 

    public string blah { get; set; } 
} 

Sau đó, trong hành động của bạn nó có thể là:

[HttpGet] 
public PartialViewResult GetResults(SearchPreferences prefs) 
{ 
    var model = repository.GetResults(prefs); 
    return PartialView("Results", model); 
} 

Họ chính là phải có tên trong dữ liệu .get $ của bạn khớp với tên trong lớp SerachPreferences của bạn .

+0

vâng, tôi nhận thức được điều đó - và tôi ** có lớp đó. Nhưng với phương pháp này tôi vẫn cần phải vượt qua tất cả các thông số cá nhân, đó là những gì im cố gắng để tránh. – RPM1984

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