CẬP NHẬT: Bây giờ, việc thêm thuộc tính html vào mẫu trình chỉnh sửa mặc định rất đơn giản. Có nghĩa là thay vì làm điều này:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
bạn chỉ có thể làm điều này:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
Lợi ích: Bạn có không gọi .TextBoxFor
vv cho các mẫu. Chỉ cần gọi .EditorFor
.
Trong khi @ giải pháp Shark của hoạt động chính xác và nó là đơn giản và hữu ích, giải pháp của tôi (mà tôi sử dụng luôn luôn) là này một Tạo một editor-template
có thể xử lý readonly
thuộc tính:
- Tạo thư mục có tên
EditorTemplates
trong ~/Views/Shared/
- Tạo một dao cạo
PartialView
tên String.cshtml
Điền vào String.cshtml
với mã này:
@if(ViewData.ModelMetadata.IsReadOnly) {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" })
} else {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" })
}
Trong lớp mô hình, đặt thuộc tính [ReadOnly(true)]
trên tài sản mà bạn muốn trở thành readonly
.
ví dụ:
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Bây giờ bạn có thể sử dụng cú pháp mặc định dao cạo chỉ đơn giản:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
Người đầu tiên, làm cho một bình thường text-box
như thế này:
<input class="text-box single-line" id="field-id" name="field-name" />
và thứ hai, sẽ trả cho;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Bạn có thể sử dụng giải pháp này cho bất kỳ loại dữ liệu (DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
và vân vân). Chỉ cần tạo một editor-template
.
Nguồn
2012-07-28 16:17:16
@Shyju Xin lỗi, tôi đã thiếu tiền tố '@' của thuộc tính 'readonly'. Xem chỉnh sửa của tôi. –
Trong tương lai, nếu bạn nhận được bất kỳ loại lỗi nào thêm thuộc tính vào đối số động, bạn có thể thêm tiền tố cho chúng bằng '@'. Thông thường, bạn sẽ chỉ thấy từ khóa khớp với các thuộc tính HTML (như chỉ đọc, lớp, v.v.) –
@BradChristie: Không; bạn chỉ cần một '@' để sử dụng các thuộc tính khớp với các từ khóa ** C# **. – SLaks