2014-09-08 33 views
8

ASP.Net MVC cùng với Thuộc tính tùy chỉnh trong mô hình của bạn và với Dao cạo, cho phép bạn chỉ viết Trình trợ giúp HTML như @ Html.ValidationMessageFor (model => model.MyAttribute) để xác thực mỗi trường.Xác thực ASP.Net MVC với Angular VS Razor

AngularJS dự định hiển thị mọi thứ ở phía máy khách, vì vậy chúng tôi không có quyền truy cập Razor và tất cả trình xác thực javascript được tạo miễn phí. Chúng ta phải mã hóa tất cả mọi thứ một lần nữa bằng tay, và chúng ta không có sự đảm bảo rằng việc xác nhận hợp lệ này được đồng bộ hóa với sự xác thực phía máy chủ, mà chúng ta đã có với Razor.

Chúng ta sẽ vượt qua GAP này như thế nào?

+0

Tôi đã gặp phải trường hợp lựa chọn thiết kế tương tự này.Cuối cùng, tôi đã loại bỏ bất kỳ xác thực MVC nào và sử dụng một vài lệnh chỉ thị xác thực của trình khách angularJS được tích hợp sẵn. Đối với các xác nhận hợp lệ cần truy cập vào tài nguyên máy chủ hay không trong bất kỳ xác nhận hợp lệ nào, tôi đã tạo và triển khai nó như một chỉ thị – alpinescrambler

+1

có vẻ như bạn đang cố sử dụng angularjs theo cách tương tự như công việc loại trực tiếp! bỏ các hợp lệ OOB đi kèm với MVC nó sử dụng jquery vì vậy bạn đang cố gắng trộn cam và táo, với tôi bạn nên nghĩ lại dự án của bạn về kiến ​​trúc kịch bản tốt nhất là sử dụng API Restfull phía sau góc cạnh, xác thực mọi thứ trên phía máy khách và xác nhận tất cả các đầu vào của API của bạn ở phía máy chủ, servicestack hoặc API web là các tùy chọn tốt cho phần mềm trung gian của bạn! –

+0

Nhưng API Restfull của tôi có thể trả về một ViewModel được sáng tác bởi một vài đối tượng. Trong Razor Validations chúng được cung cấp miễn phí nếu bạn chỉ sử dụng các thuộc tính trong các lớp mô hình của bạn ở phía máy chủ. Trong góc, tất cả đều bị mất và nếu tôi thay đổi thuộc tính xác thực trên máy chủ, nó sẽ không phản ánh trên máy khách. – user3864332

Trả lời

0

Tôi nghĩ đây là câu hỏi Người mới bắt đầu sẽ đặt câu hỏi (đây là cách tôi tìm thấy nó :)), và đây là cách tôi nghĩ cuối cùng:

Mo del trường để xác nhận được từ góc nhìn -> để một bộ điều khiển góc -> đến một dịch vụ góc -> để asp.webapi phương pháp hoặc hành động điều khiển asp.mvc, mà trong bản đồ kết thúc -> đến một mô hình mvc

Điều này có nghĩa rằng trên tất cả những người (ít nhất 4 "máy chiếu"), bạn phải chắc chắn để chuyển chính xác mô hình và lĩnh vực mà bạn sẽ tham khảo với dao cạo.

Vì vậy, ý tôi là, có rất nhiều thứ có thể thổi sự nhất quán của bạn trên đường đi.

Hãy từ bỏ dao cạo để xác thực.

Có thể duy trì dễ dàng hơn (có thể đọc được) để viết lại chúng theo cách thủ công cho phía máy khách và sử dụng các kiểm tra tự động để đảm bảo tính nhất quán.

+0

Câu trả lời của bạn có thể là tốt nhất cho các trang SPA mini. Nhưng còn những trang CRUD đơn giản thì sao? – user3864332

0

Tôi sẽ sử dụng mô hình phía máy chủ để thực hiện xác thực máy chủ và thực hiện tất cả xác thực ứng dụng khách với Angular.

Sự cố cũ và tồn tại trước khi đạt được mức độ phổ biến của Góc. Hãy tưởng tượng rằng bạn đang xây dựng mô hình miền của mình và bạn tạo mô hình chế độ xem đơn giản cho ứng dụng MVC. Trong trường hợp này, bạn có các lựa chọn thay thế sau:

  1. Xây dựng mô hình chế độ xem trên mô hình miền không phải là giải pháp tốt đôi khi. Trong trường hợp này, bạn có thể chia sẻ xác nhận từ mô hình miền với mô hình khung nhìn.
  2. Tạo mô hình chế độ xem được tách riêng khỏi mô hình miền của bạn, điều này lý tưởng, tuy nhiên trong trường hợp này, bạn có thể kết thúc bằng cách sao chép xác thực. Phát triển xác thực cho phía máy chủ trong mô hình miền và xác thực cho giao diện người dùng trong mô hình khung nhìn.

Theo mô hình xem, tôi có nghĩa là mô hình trong dự án MVC được đính kèm với chế độ xem.

Theo ý kiến ​​của tôi, tôi sẽ luôn chọn tùy chọn 2 và trong trường hợp của bạn, tôi sẽ tạo xác thực phía máy khách bằng xác thực phía máy chủ và phía máy chủ trong mô hình miền.