Проблема полягає в тому, що ваш шаблон може містити кілька елементів HTML, тому MVC не знатиме, до якого застосувати розмір / клас. Вам доведеться визначити це самостійно.
Зробіть свій шаблон похідним із власного класу під назвою 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
}
}
У шаблоні ви можете це зробити:
<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />
На ваш погляд, ви робите:
<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>
Перша форма відобразить шаблон за замовчуванням для рядка. У другій формі буде відображено спеціальний шаблон.
Альтернативний синтаксис використовує вільний інтерфейс:
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) %>
Зауважте, що замість того, щоб робити це у представленні даних, ви також можете це зробити в контролері або набагато краще в 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) });
}
Також зауважте, що ви можете створити базовий клас TemplateViewModel - спільну основу для всіх ваших шаблонів перегляду - який буде містити базову підтримку атрибутів / тощо.
Але загалом я думаю, що MVC v2 потребує кращого рішення. Це все-таки бета-версія - іди проси;