Một cách để thực hiện việc này là tạo ModelBinder
của riêng bạn, đây sẽ là trọng tâm của các biểu mẫu được tạo của bạn. Modelbinder chịu trách nhiệm xác nhận hợp lệ ModelState
và xây dựng lại kiểu đã nhập ViewDataModel
(giả sử các chế độ xem của bạn được nhập).
Bộ kết nối mô hình DataAnnotations có thể là một tham chiếu tốt cho việc này mà trình mô phỏng tùy chỉnh này cho phép bạn thực hiện thông qua Attributes
trên xác nhận của thuộc tính (và gợi ý khi hiển thị giao diện người dùng). Tuy nhiên đây là tất cả thời gian biên dịch được xác định nhưng sẽ là một tham chiếu tuyệt vời để bắt đầu viết một mô hình tùy chỉnh.
Trong trường hợp của bạn, trình kết nối mô hình của bạn sẽ nhận được xác thực cho trường trong thời gian chạy từ tệp/chuỗi xml.
Nếu bạn có một tuyến đường như:
routes.MapRoute(null, "Forms/{formName}/", new { action = "Index", controller = "Forms", formName = ""}),
Sau đó, bạn có thể xác định vị trí các hình thức xml đúng trong FormsController.Index(string formName)
và vượt qua nó để xem.
FormsModel
nên giữ tất cả các phương pháp có thể để nhận dữ liệu Tôi không thấy bất kỳ cách nào khác xung quanh việc này. Xml có thể ánh xạ tới tên hàm (thậm chí có thể là đối số) mà bạn có thể gọi bằng cách sử dụng sự phản chiếu trên FormsModel
để điền vào ViewData
hoặc nhập ViewDataModel
với dữ liệu.
Chế độ xem cho Chỉ mục biểu mẫu có thể tạo biểu mẫu từ xml đó thông qua số HtmlHelper
Tiện ích mở rộng có số XmlDocument
.
Sau đó, khi bạn (hoặc asp.net mvc) liên kết biểu mẫu với ViewData
trình liên kết mô hình tùy chỉnh của bạn được gọi, nó có thể kiểm tra giá trị bộ điều khiển hiện tại để tìm biểu mẫu và tìm kiếm xml tương ứng chứa tất cả các quy tắc xác thực . Sau đó, ModelBinder
chịu trách nhiệm điền ModelState
với bất kỳ lỗi nào được xác định trong thời gian chạy.
Đó là một nhiệm vụ khó khăn nhưng khi kéo ra thành công cũng có giá trị nó trong quan điểm của tôi :)
Cập nhật một lựa chọn tốt hơn để mô hình hóa dữ liệu sẽ là một CSDL rất lỏng lẻo như David Liddle gợi ý. Tôi vẫn gặp rắc rối khi lưu nó dưới dạng xml (hoặc định dạng được tuần tự hóa khác) và sử dụng để tạo khung nhìn và giữ các quy tắc xác thực cho một tuỳ chỉnh ModelBinder
để bạn có nhiều quyền kiểm soát hơn đối với bố cục và xác thực của từng trường.
Tôi phản đối việc đóng câu hỏi này. Kiến trúc đằng sau việc tạo các biểu mẫu thời gian chạy * trên một khuôn khổ phía máy chủ cụ thể * là rộng, nhưng nó rõ ràng là câu trả lời như các câu trả lời dưới đây chứng minh. Có phải tất cả các câu hỏi về kiến trúc đều nằm ngoài chủ đề của trang web này đơn giản vì các quyết định về kiến trúc ở mức cao và có ưu và nhược điểm? –