Ce que je n'aime pas Types de données Les attributs sont ceux que vous devez utiliser Rédacteur en chef dans la vue. Dans ce cas, vous ne pouvez pas utiliser htmlAttributes pour décorer votre étiquette. Il existe d'autres solutions mais je préfère cette méthode.
Dans cet exemple, je n'ai étendu que la signature que j'utilise le plus souvent.
Donc dans la classe :
using System.Linq.Expressions;
namespace System.Web.Mvc.Html
{
public static class HtmlExtensions
{
public static MvcHtmlString EmailFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, Object htmlAttributes)
{
MvcHtmlString emailfor = html.TextBoxFor(expression, htmlAttributes);
return new MvcHtmlString(emailfor.ToHtmlString().Replace("type=\"text\"", "type=\"email\""));
}
}
}
Comme vous le voyez, j'ai juste changé le type="text" pour le type="email" et je peux ensuite l'utiliser dans ma vue :
<div class="form-group">
@Html.LabelFor(m => m.Email, new { @class = "col-lg-2 control-label" })
<div class="col-lg-10">
@Html.EmailFor(m => m.Email, new { @class = "form-control", placeholder = "Email" })
@Html.ValidationMessageFor(m => m.Email)
</div>
</div>
Et la source html donne :
<div class="form-group">
<label class="col-lg-2 control-label" for="Email">Email</label>
<div class="col-lg-10">
<input class="form-control" data-val="true" data-val-required="The Email field is required." id="Email" name="Email" placeholder="Email" type="email" value="" />
<span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
</div>
</div>