2013-12-16 19 views
9

Kịch bản tôi có vẻ khá phổ biến nhưng tôi không tìm thấy giải pháp tốt cho đến nay. Vì vậy, có ASP.NET-MVC ứng dụng với cơ sở dữ liệu MSSQL ngồi trong back-end. Mô hình bao gồm lớp A với trường chuỗi Mô tả cần được giới hạn trong 100 ký tự. Nó tuyên bố như sau:Giới hạn độ dài trường chuỗi và ngắt dòng

[StringLength(100)] 
    public virtual string Description { get; set; } 

Các cột tương ứng trong cơ sở dữ liệu là nvarchar với chiều dài cột = 100. Trong giao diện người dùng, trường Mô tả được thể hiện bằng văn bản với maxlength = 100.

Bây giờ vấn đề xảy ra khi có ngắt dòng trong vùng văn bản. Chúng được hiểu là 1 ký tự ở phía máy khách, nhưng ở phía máy chủ chúng được đại diện bởi Environment.NewLine là 2 ký tự (\ r \ n). Vì vậy, nó vượt quá chiều dài cột cơ sở dữ liệu (thực sự xác thực phía máy chủ không thành công trước toàn bộ điều back-end nhưng chúng ta hãy bỏ qua việc xác nhận tính đơn giản).

Các giải pháp tôi đã tìm thấy cho đến nay là:

  1. Thêm một số phép thuật về phía khách hàng để giải thích ngắt dòng trong textarea như hai nhân vật. Tôi không thích giải pháp này vì có thể gây nhầm lẫn cho người dùng.
  2. Thay thế \ r \ n bằng \ n ở phía máy chủ. Có vẻ như một hack có thể có một số tác dụng phụ.
  3. Xóa/tăng độ dài cột trong cơ sở dữ liệu. Cách đơn giản nhất là (không tính đến vấn đề xác thực phía máy chủ) nhưng hãy nói rằng không phải như vậy.

Tôi đoán có điều gì đó khác ngoài ba yếu tố đó.

Trả lời

1

Đây là sự cố cũ và đã biết với MVC (Tôi không chắc chắn nếu nó được giải quyết) nhưng các trình duyệt khác nhau xử lý ngắt dòng khác nhau. Đề xuất của tôi là liên kết mô hình tùy chỉnh giống như những gì bạn tìm thấy ở đây jQuery validate textarea maxlength bug

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