2010-10-03 31 views
9

Nếu bạn đang sử dụng phương pháp loại Html.TextBoxFor(), bạn có thể cũng kết thúc với Form controls có dấu chấm trong tên của họ, như thế này:Tham số Bộ điều khiển MVC cho phần tử biểu mẫu có dấu chấm trong đó?

<input type="text" name="Contact.FirstName" id="Contact_FirstName" />

Nếu bạn muốn MVC để lập bản đồ các lĩnh vực này được ghi tên vào thông số trong bộ điều khiển của bạn (trái ngược với tham số đối tượng hoặc bất kỳ thứ gì), bạn phải lấy tên tham số đúng. Phải làm gì với các dấu chấm?

Cả này:

[HttpPost] 
public ActionResult FooAction(string firstName) 

không này:

[HttpPost] 
public ActionResult FooAction(string contact_FirstName) 

dường như để làm việc.

Chỉnh sửa: Có thông số đối tượng phù hợp sẽ hoạt động (ví dụ: see clicktricity's answer), nhưng tôi đang tìm cách thực hiện với các tham số giá trị được đặt tên.

Trả lời

14

Tôi đã tìm thấy một cách khác, một loại hack vì tôi tin rằng đây là lạm dụng của BindAttribute, để liên kết firstName thông số với Liên hệ.FirstName yếu tố đầu vào:

[HttpPost] 
public ActionResult FooAction([Bind(Prefix="Contact.FirstName")]string firstName) 

này chắc chắn làm việc với ASP.NET MVC 1.

+0

Xin chào, điều đó thật thú vị. Tại sao bạn gọi nó là lạm dụng? Đây không phải là những gì mà BindAttribute dành cho? – codeulike

+0

Dường như thuộc tính BindAttribute.Prefix chỉ nhằm mục đích cung cấp một bí danh cho thể hiện kiểu phức. –

+0

Nó cũng hoạt động trên MVC 2. Tôi gọi đây là 'sáng tạo' hơn là hack. – codeulike

4

Tùy thuộc vào các điều khiển biểu mẫu khác, bạn sẽ có thể có trình kết nối mô hình mặc định MVC xây dựng một đối tượng Địa chỉ liên hệ cho bạn. Sau đó, chữ ký của phương pháp hành động của bạn sẽ là:

[HttpPost] 
public ActionResult FooAction(Contact contact) 

thì Contact.FirstName (và bất kỳ fileds khác) sẽ bị ràng buộc một cách chính xác

+0

Cảm ơn, vâng, điều đó sẽ làm việc nhưng tôi quan tâm nếu phương pháp tham số chuỗi cũng có thể làm việc. – codeulike

+2

Thật không may là không. Đây là một trong những vấn đề với "quy ước về cấu hình" khi bạn không muốn theo quy ước. Nếu bạn cần ràng buộc với giá trị riêng lẻ, hãy viết một mô hình tùy chỉnh, hoặc lấy giá trị từ bộ sưu tập Biểu mẫu – Clicktricity

+0

Ah, ok. Vì vậy, nó không thể với các tham số chuỗi. Cảm ơn – codeulike

2

Như Clicktricity gợi ý trong ý kiến ​​bạn có thể sử dụng

[HttpPost] 
public ActionResult FooAction(FormCollection form) 
{ 
    firstName = form["Contact.FirstName"]; 
} 
Các vấn đề liên quan