2013-02-21 86 views
14

Tôi đã đánh dấu một tài sản như readonly trong lớp mô hình, như thế này:thuộc tính ReadOnly không hoạt động trong ASP.NET MVC Models

public class RegisterModel 
{ 
    [Display(Name = "User name")] 
    [ReadOnly(true)] 
    public string UserName { get; set; } 
    ... 
} 

và theo quan điểm của tôi:

@Html.EditorFor(m => m.UserName) 

nhưng khi tôi chạy ứng dụng, hộp văn bản không phải là chỉ đọc.

Tôi biết tôi có thể sử dụng thuộc tính html trong chế độ xem để làm cho nó chỉ đọc, nhưng tôi muốn nếu điều này có thể được thực hiện trong chính lớp mô hình.

Nó có thể đạt được không?

+0

+1 để thử !! –

+0

nó sẽ không được nó, bạn có nghĩ rằng nó là ma thuật –

Trả lời

14

[Cập nhật] Tôi không nghĩ rằng đó là tốt mà không new { @readonly = "readonly" }. Readonly thuộc tính xác định xem thuộc tính thuộc tính này có bị ràng buộc là chỉ đọc hoặc đọc/ghi hay không. Details Here.

Nhưng bạn có thể thử cho Custom Helpers hoặc thử dùng Editable thay Readonly trên mô hình và sử dụng tài sản siêu dữ liệu trong View của bạn.

[Editable(false)] 

Tôi đoán bạn đã nhìn vào Does ReadOnly(true) work with Html.EditorForModel?

cũng một bài viết tốt odetocode.com

+0

Một điểm tuyệt vời.Nhưng quan trọng hơn, không đếm trên chú thích cho tất cả mọi thứ. Chúng thật tuyệt vời, nhưng chúng tôi bị hư hỏng và mong đợi họ lau chúng sau khi chúng tôi hơi quá thường xuyên –

+5

Baffled như thế nào đây là câu trả lời được lựa chọn.Tôi đã thiết lập một dự án mẫu tầm thường và giải pháp này không hoạt động. là giải pháp duy nhất.Tôi hiểu anh ấy muốn chỉ định điều này trong mô hình, nhưng nó không thể được thực hiện theo cách đó. – CoderSteve

+0

Tôi muốn chỉ ra rằng khi cài đặt chỉ đọc trong html sẽ ngăn người dùng chung chỉnh sửa hộp văn bản, bất kỳ ai có chút kiến ​​thức về html và javascript đều có thể làm mọi thứ lộn xộn nên không dựa vào thuộc tính html để bảo vệ dữ liệu. Mục đích là để ngăn chặn các mô hình được thay đổi bất kể những gì đã xảy ra ở mặt trước. –

7

Thuộc tính ReadOnly không đặt đầu vào thành chỉ đọc.

Hãy thử điều này

Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" }) 
+0

cảm ơn, nhưng như tôi đã nói, tôi không muốn sử dụng cách html để làm điều này, tôi đang tìm một số giải pháp mà sẽ tạo ra "chỉ đọc "vào html khi đọc siêu dữ liệu từ mô hình –

+0

@EdiWang đáng buồn là điều này là đúng. Tôi chuẩn bị tự đăng bài khi câu trả lời xuất hiện. –

+0

@Dave A Oh, thật sao? Đây không phải là tốt đẹp .....: ( –

0

Nếu bạn đang sử dụng một setter bạn phải sử dụng {get; bộ tư nhân; }. Điều đó sẽ làm cho nó để khách hàng không thể thay đổi giá trị. Bạn cũng có thể sử dụng đầu vào HTML 5 và đánh dấu nó ở đó.

9

ReadOnly thuộc tính không chặn trình trợ giúp HMTL để hiển thị trường dưới dạng đầu vào được bật. Nó là một thông tin mà chỉ có dữ liệu MVC Binder sẽ tôn trọng.

Điều này có nghĩa là RegisterModel thể hiện, sẽ được đăng lại sau khi người dùng gửi biểu mẫu sẽ luôn có giá trị null trên tài sản UserName bất kể người dùng nhập vào trường thích hợp của biểu mẫu.

+0

Tôi hoàn toàn hiểu lầm những gì 'ReadOnly' làm. Điều này làm rõ nó. Cảm ơn! – Bobson

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