Nếu bạn muốn sử dụng một trong vài khung xác nhận cho ASP.NET MVC (xval, dữ liệu Chú thích các thuộc tính, vv) và chỉ xác nhận một tập hợp con của các lĩnh vực của một mô hình cho một hành động cụ thể, dễ nhất giải pháp là sử dụng thuộc tính [Bind]
.
Trong khi tôi chắc chắn có thể nghĩ về trường hợp bạn chỉ muốn xác thực đối với một tập con của trường của mô hình (tức là trong hành động Create
), tôi không thể nghĩ ra trường hợp bạn muốn xác thực cho một trường cụ thể hoàn toàn khác nhau giữa hai hành động khác nhau.
Dưới đây là một ví dụ đơn giản, sử dụng đối tượng Mô hình người cùng với thuộc tính Trình xác thực chú thích dữ liệu. Hành động Create
và Update
sẽ xác thực đối với một nhóm trường khác của mô hình.
Mẫu:
public class Person
{
[Required]
Int32 Id { get; set; }
[Required]
String FirstName {get; set;}
[Required]
String LastName {get; set;}
}
điều khiển Actions:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "Id")] Person person)
{
// this action will not perform any validation checks against the Id property of the model
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Update(Person person)
{
// this action will perform validation checks against all model properties, including Id
}
Trong ví dụ trên, hành động Create
sẽ hoàn toàn bỏ qua Id
thuộc tính của đối tượng mô hình Person
. Nó sẽ không cố gắng ràng buộc tài sản này, cũng như không cố gắng thực hiện bất kỳ xác nhận nào đối với nó. Kể từ khi một người sẽ không có một Id tại thời điểm tạo ra, điều này là chính xác những gì bạn muốn. Mặt khác, hành động Update
sẽ ràng buộc và xác thực tất cả các thuộc tính của mô hình.
Thực tế là thuộc tính Bind
được chỉ định trên đối số phương pháp có thể làm cho mã một chút ở phía xấu xí. Tuy nhiên, nếu danh sách Exclude
dài, bạn luôn có thể thêm một số ngắt dòng bổ sung và khoảng trắng để giúp giảm mức độ xấu.
Nguồn
2009-10-20 19:58:55
Câu trả lời hay. Cảm ơn – user10479