Ce site es possible de réaliser à l'intérieur d'un fichier d'aide avec l'option @functions
syntaxe, mais si vous voulez obtenir la lisibilité de style rasoir à laquelle vous faites référence, vous devrez également faire appel à un assistant régulier pour effectuer l'ajustement et la finition du HTML.
Notez que les fonctions d'un fichier Helper sont statiques. Vous devrez donc toujours transmettre l'instance HtmlHelper de la page si vous avez l'intention d'utiliser ses méthodes.
par exemple Vues \MyView.cshtml :
@MyHelper.DoSomething(Html, m=>m.Property1)
@MyHelper.DoSomething(Html, m=>m.Property2)
@MyHelper.DoSomething(Html, m=>m.Property3)
App_Code \MyHelper.cshtml :
@using System.Web.Mvc;
@using System.Web.Mvc.Html;
@using System.Linq.Expressions;
@functions
{
public static HelperResult DoSomething<TModel, TItem>(HtmlHelper<TModel> html, Expression<Func<TModel, TItem>> expr)
{
return TheThingToDo(html.LabelFor(expr), html.EditorFor(expr), html.ValidationMessageFor(expr));
}
}
@helper TheThingToDo(MvcHtmlString label, MvcHtmlString textbox, MvcHtmlString validationMessage)
{
<p>
@label
<br />
@textbox
@validationMessage
</p>
}
...
0 votes
Toujours pas corrigé dans la version actuelle de MVC 4 :(
1 votes
Comment se fait-il que ce problème ne soit toujours pas résolu dans VS2012 ?
7 votes
Bon sang, j'ai hâte que cela soit ajouté ; j'espère que c'est quelque part autour de " le mettre en œuvre hier " sur la liste des priorités. Partiellement hors sujet, mais à côté de cela, j'aimerais que les classes générées soient
static
à moins que des détails d'implémentation ne l'interdisent ; la raison étant que l'on pourrait utiliser aides génériques à l'extension :@helper Foo<T>(this T o) where T : IBar { }