Das Problem ist, dass Ihre Vorlage mehrere HTML-Elemente enthalten kann, sodass MVC nicht weiß, auf welches Ihre Größe / Klasse angewendet werden soll. Sie müssen es selbst definieren.
Lassen Sie Ihre Vorlage von Ihrer eigenen Klasse namens TextBoxViewModel ableiten:
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
}
}}
In der Vorlage können Sie dies tun:
<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />
Aus Ihrer Sicht tun Sie:
<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>
Das erste Formular rendert die Standardvorlage für die Zeichenfolge. Das zweite Formular rendert die benutzerdefinierte Vorlage.
Alternative Syntax verwenden fließende Schnittstelle:
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) %>
Beachten Sie, dass Sie dies nicht in der Ansicht, sondern auch im Controller oder viel besser im ViewModel tun können:
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) });
}
Beachten Sie auch, dass Sie die Basis-TemplateViewModel-Klasse erstellen können - eine gemeinsame Grundlage für alle Ihre Ansichtsvorlagen -, die grundlegende Unterstützung für Attribute / etc. Enthält.
Aber im Allgemeinen denke ich, dass MVC v2 eine bessere Lösung braucht. Es ist immer noch Beta - frag danach ;-)