tôi thấy rằng tôi thích quan điểm của tôi chỉ cần Gọi Html.EditorFor (...). Điều này có nghĩa là các mẫu Trình chỉnh sửa và Hiển thị quyết định số phận của các điều khiển theo quan điểm của tôi, như vậy mã xem của tôi được làm sạch rất nhiều - nó chỉ có các yêu cầu html và chung cho các trình soạn thảo.
Các liên kết dưới đây cho một mẫu làm việc của nhận làm việc này trong một biên tập Template https://jefferytay.wordpress.com/2011/12/20/asp-net-mvc-string-editor-template-which-handles-the-stringlength-attribute/
Tôi đang sử dụng tương tự trong String.cshtml biên tập Template của tôi (đi trong Shared/EditorTemplates) .
@model object
@using System.ComponentModel.DataAnnotations
@{
ModelMetadata meta = ViewData.ModelMetadata;
Type tModel = meta.ContainerType.GetProperty(meta.PropertyName).PropertyType;
}
@if(typeof(string).IsAssignableFrom(tModel)) {
var htmlOptions = new System.Collections.Generic.Dictionary<string, object>();
var stringLengthAttribute = (StringLengthAttributeAdapter)ViewData.ModelMetadata.GetValidators(this.ViewContext.Controller.ControllerContext).Where(v => v is StringLengthAttributeAdapter).FirstOrDefault();
if (stringLengthAttribute != null && stringLengthAttribute.GetClientValidationRules().First().ValidationParameters["max"] != null)
{
int maxLength = (int)stringLengthAttribute.GetClientValidationRules().First().ValidationParameters["max"];
htmlOptions.Add("maxlength", maxLength);
if (maxLength < 20)
{
htmlOptions.Add("size", maxLength);
}
}
htmlOptions.Add("class", "regular-field");
<text>
@Html.TextBoxFor(m => m, htmlOptions)
</text>
}
else if(typeof(Enum).IsAssignableFrom(tModel)) {
//Show a Drop down for an enum using:
//Enum.GetValues(tModel)
//This is beyond this article
}
//Do other things for other types...
Sau đó mô hình của tôi được chú thích như:
[Display(Name = "Some Field", Description = "Description of Some Field")]
[StringLength(maximumLength: 40, ErrorMessage = "{0} max length {1}.")]
public string someField{ get; set; }
Và Xem tôi chỉ đơn giản gọi:
<div class="editor-label">
@Html.LabelWithTooltipFor(model => model.something.someField)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.something.someField)
@Html.ValidationMessageFor(model => model.something.someField)
</div>
Bạn cũng có thể nhận thấy rằng biên tập viên Template String.cshtml của tôi cũng tự động xử lý kỳ diệu của Enum, nhưng đó là bắt đầu từ digress từ chủ đề hiện tại, vì vậy tôi nixed c ode, tôi sẽ chỉ nói ở đây rằng Chuỗi Trình chỉnh sửa chuỗi có thể kéo thêm trọng lượng và có khả năng google có đôi chút trên đó https://www.google.com/search?q=string+editor+template+enum
Nhãn với Tooltip For là trình trợ giúp HTML tùy chỉnh chỉ cần mô tả vào tiêu đề nhãn, cho thêm thông tin về việc di chuột qua từng nhãn.
Tôi muốn giới thiệu phương pháp này nếu bạn muốn thực hiện điều này trong một Mẫu biên tập .
Điều đó có vẻ tuyệt vời! Nó sẽ có thể có một cái gì đó tương tự như những gì bạn đề cập ở trên để được sử dụng trong Html.EditorForModel()? Cảm ơn sự giúp đỡ của bạn. – frostshoxx
@frostshoxx Bạn có thể làm điều đó bằng cách sử dụng [UIHintAttribute] (http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.uihintattribute.aspx) và tạo mẫu tùy chỉnh cho từng loại dữ liệu. Tôi đã không thử điều này mặc dù. – Eranga