2012-02-16 29 views
17

Tôi đã xây dựng một trang bằng cách sử dụng ASP.NET MVC 2 bằng KnockoutJS, KnockoutJS Mapping plugin, và jQuery 1.7.1. Tôi muốn có thể sử dụng plugin Xác thực KnockoutJS (được tìm thấy here). Tuy nhiên tôi cần phải có cả xác thực phía máy chủ và phía máy khách.Mô hình xem bản đồ để xác nhận KnockoutJS

Có thể để các mô hình chế độ xem của tôi ánh xạ tới KnockoutJS Validation plugin sử dụng phương thức .extend() không?

EDIT: Ví dụ. Tự động tắt chức năng này:

[Required] 
public string Firstname { get; set; } 

Into này:

var viewmodel = { 
    firstname: ko.observable().extend({ required: true }); 
} 
+0

Bạn có đang sử dụng Chú thích dữ liệu trên các mô hình C# của mình và sử dụng EditorFor để điền các quy tắc xác thực khách hàng hay bạn muốn?Bạn có thể sử dụng cùng một xác nhận clientes không phô trương mà MVC đã xây dựng trong đó bạn có thể sử dụng cho các biểu mẫu kiểu MVC tiêu chuẩn không có quá nhiều công việc (ít nhất là trong MVC3 với mẫu ứng dụng Internet). – kendaleiv

+0

Vui lòng xem các chỉnh sửa của tôi trong bản gốc – Ryan

+0

Đây là một cách tiếp cận rất hấp dẫn và tôi đã đưa ra rất nhiều suy nghĩ. Tôi đã suy nghĩ về việc tạo mã hành vi từ C# đến Javascript. Điều đó nói rằng, tôi nghĩ bạn sẽ phải tạo ra một cái gì đó phản ánh mô hình và tạo ra javascript. Có lẽ chỉ là phần xác thực và cho phép plugin ánh xạ làm những gì nó làm. Sự kết hợp của ánh xạ và mã xác nhận được tạo ra có thể cung cấp cho bạn những gì bạn cần. Lý do tại sao tôi nghĩ rằng bạn cần tạo mã xác nhận là vì tôi nghĩ bạn sẽ gặp khó khăn khi tạo mã xác nhận chỉ sử dụng Javascript, nhưng tôi có thể sai. –

Trả lời

7

Trong Mvc Controls Toolkit Tôi đã triển khai một công cụ cho phép xác thực Mvc thông thường (chú thích dữ liệu hoặc bất kỳ thứ gì) trên knockout.js.Bằng phía máy khách và xác thực phía máy chủ có thể được bật. Hơn nữa, loại bỏ có thể được sử dụng với người trợ giúp Mvc, một số ràng buộc được suy ra tự động, vv

+0

Thật tuyệt vời nếu bạn có thể bắt đầu với chúng tôi về cách bạn triển khai nó bằng cách sử dụng Bộ công cụ điều khiển MVC. Rất cám ơn – Ian

0

Việc xác Plugin làm việc theo cách mà bạn mở rộng quan sát bạn muốn để xác nhận.

Nó không quan trọng nếu chúng được tạo ra từ ánh xạ, chỉ cần tạo ra một chức năng mà bạn chạy sau khi ánh xạ đã được thực hiện và thêm tất cả các xác nhận bạn muốn.

Hoặc, nếu bạn muốn, bạn có thể sử dụng các ràng buộc xác thực. Đọc Readme trên Github để xác nhận loại trực tiếp và bạn thấy cách họ làm điều đó.

+0

Vui lòng xem các chỉnh sửa của tôi trong câu hỏi gốc – Ryan

1

tôi khuyên bạn nên sử dụng được xây dựng trong MVC xác nhận clientside, bạn có thể cần phải gọi nó, hãy thử này:

$.validator.unobtrusive.parse(yourFormElement) 

Mã từ: https://stackoverflow.com/a/5669575/941536

Không chắc chắn nếu MVC2 có xác nhận clientside không phô trương dù , không chắc chắn nếu nâng cấp lên MVC3 sẽ là một lựa chọn cho bạn nếu cần thiết.

+4

Đây không phải là cách ưu tiên để xác thực KnockoutJ. Bạn không muốn xác thực các phần tử biểu mẫu. Bạn muốn xác thực mô hình khung nhìn. –

+2

Có cách nào dễ dàng để sử dụng lại DataAnnotations hoặc FluentValidator .Net code với tính năng xác nhận Knockout và nó có hợp lệ hóa chế độ xem Knockout không? Tôi muốn tránh tạo và duy trì hai bộ quy tắc xác thực, nhưng điều này thậm chí còn khó khăn hơn nếu mô hình xem Knockout và mô hình .Net không khớp hoặc quá khác nhau. – kendaleiv

+0

"Đây không phải là cách ưu tiên để xác nhận KnockoutJ". Tại sao? Xác thực được kết nối với các yếu tố đầu vào của người dùng và các yếu tố đầu vào thường được ánh xạ tới các thuộc tính mô hình. Hiển thị thông báo lỗi không được kết nối với trường nhập nhưng đối với một số thuộc tính mô hình không hiển thị cho người dùng có thể gây nhầm lẫn cho người dùng rất nhiều. –

5

Nếu bạn đang sử dụng knockoutj và jquery, tôi đã đưa ra phương pháp rất đơn giản sau đây để xác thực phía khách hàng cơ bản.

Bất cứ nơi nào bạn muốn hiển thị các thông báo lỗi trên trang của bạn, bao gồm một thẻ div như thế này:

<span name="validationError" style="color:Red" 
data-bind="visible: yourValidationFunction(FieldNameToValidate())"> 
* Required. 
</span> 

Rõ ràng bạn cần phải viết "yourValidationFunction" để làm bất cứ điều gì bạn muốn nó làm. Nó chỉ cần trả về true hoặc false, true nghĩa là hiển thị lỗi.

Bạn có thể sử dụng jquery để ngăn người dùng tiếp tục nếu có bất kỳ lỗi xác thực nào được hiển thị. Bạn có thể đã có một nút lưu sẽ kích hoạt chức năng javascript để làm một số ajax hoặc bất cứ điều gì, vì vậy chỉ cần bao gồm này ở phía trên cùng của nó:

if ($("[name='validationError']:visible").length > 0) { 
     alert('Please correct all errors before continuing.'); 
     return; 
    } 

Đây là đơn giản hơn rất nhiều và linh hoạt hơn so với nhiều giải pháp xác nhận khác ra đó. Bạn có thể định vị thông báo lỗi của mình bất cứ nơi nào bạn muốn, và bạn không cần phải tìm hiểu cách sử dụng một số thư viện xác nhận, và phương thức này hoạt động bất kể công nghệ phía máy chủ.

+0

+1 Tôi thích sự đơn giản của giải pháp của bạn. Tôi hiện đang đấu tranh với jQuery valdiate cho các lĩnh vực không cần thiết và Knockout và câu trả lời của bạn chỉ cho tôi theo một hướng mới. –

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