Vấn đề là, mẫu của bạn có thể chứa một số phần tử HTML, vì vậy MVC sẽ không biết cái nào sẽ áp dụng kích thước / lớp của bạn. Bạn sẽ phải tự xác định nó.
Tạo mẫu của bạn bắt nguồn từ lớp của riêng bạn có tên là TextBoxViewModel:
public class TextBoxViewModel
{
public string Value { get; set; }
IDictionary<string, object> moreAttributes;
public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
{
// set class properties here
}
public string GetAttributesString()
{
return string.Join(" ", moreAttributes.Select(x => x.Key + "='" + x.Value + "'").ToArray()); // don't forget to encode
}
}
Trong mẫu, bạn có thể làm điều này:
<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />
Theo quan điểm của bạn, bạn làm:
<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>
Biểu mẫu đầu tiên sẽ hiển thị mẫu mặc định cho chuỗi. Biểu mẫu thứ hai sẽ hiển thị mẫu tùy chỉnh.
Cú pháp thay thế sử dụng giao diện thông thạo:
public class TextBoxViewModel
{
public string Value { get; set; }
IDictionary<string, object> moreAttributes;
public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
{
// set class properties here
moreAttributes = new Dictionary<string, object>();
}
public TextBoxViewModel Attr(string name, object value)
{
moreAttributes[name] = value;
return this;
}
}
// and in the view
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) %>
Lưu ý rằng thay vì thực hiện việc này trong dạng xem, bạn cũng có thể thực hiện việc này trong bộ điều khiển hoặc tốt hơn nhiều trong ViewModel:
public ActionResult Action()
{
// now you can Html.EditorFor(x => x.StringValue) and it will pick attributes
return View(new { StringValue = new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) });
}
Cũng lưu ý rằng bạn có thể tạo lớp TemplateViewModel cơ sở - nền tảng chung cho tất cả các mẫu chế độ xem của bạn - sẽ chứa hỗ trợ cơ bản cho các thuộc tính / v.v.
Nhưng nói chung tôi nghĩ MVC v2 cần một giải pháp tốt hơn. Nó vẫn là bản Beta - hãy yêu cầu nó ;-)