Le problème est que votre modèle peut contenir plusieurs éléments HTML, donc MVC ne saura pas auquel appliquer votre taille / classe. Vous devrez le définir vous-même.
Faites dériver votre modèle de votre propre classe appelée 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
}
}
Dans le modèle, vous pouvez faire ceci:
<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />
À votre avis, vous faites:
<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>
Le premier formulaire rendra le modèle par défaut pour la chaîne. Le deuxième formulaire rendra le modèle personnalisé.
La syntaxe alternative utilise une interface fluide:
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) %>
Notez qu'au lieu de le faire dans la vue, vous pouvez également le faire dans le contrôleur, ou bien mieux dans le 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) });
}
Notez également que vous pouvez créer la classe TemplateViewModel de base - un terrain d'entente pour tous vos modèles de vue - qui contiendra un support de base pour les attributs / etc.
Mais en général, je pense que MVC v2 a besoin d'une meilleure solution. C'est toujours Beta - allez le demander ;-)