2010-12-02 27 views
3

Maintenant, je trouve comment créer des aides de HTML personnalisésComment faire une méthode d'aide html fortement typée personnalisée?

using System; 
namespace MvcApplication.Helpers { 
    public class InputlHelper { 
    public static string Input(this HtmlHelper helper, string name, string text) { 
     return String.Format("<input name='{0}'>{1}</input>", name, text); 
    } 
    } 
} 

Maintenant, comment le transformer en une méthode d'assistance fortement typé InputFor Comme il est dans le cadre?

Je n'ai pas besoin de la méthode Html.TextBoxFor, je sais qu'elle existe. Je suis juste curieux de savoir comment implémenter ce comportement moi-même et utilisé cela comme un exemple simple.

PS. Je regardais dans le code source mvc mais je ne pouvais pas trouver une trace de ce mystérieux TextBoxFor. J'ai seulement trouvé TextBox. Est-ce que je regarde le mauvais code?

Répondre

4

Ici vous pouvez trouver le ASP.NET MVC 2 RTM Source code.

Si vous regardez la classe InputExtensions dans l'espace de noms System.Web.Mvc.Html, vous trouverez le code suivant

[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an appropriate nesting of generic types")] 
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) { 
    return htmlHelper.TextBoxFor(expression, (IDictionary<string, object>)null); 
} 

[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an appropriate nesting of generic types")] 
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) { 
    return htmlHelper.TextBoxFor(expression, new RouteValueDictionary(htmlAttributes)); 
} 

[SuppressMessage("Microsoft.Design", "CA1006:DoNotNestGenericTypesInMemberSignatures", Justification = "This is an appropriate nesting of generic types")] 
public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) { 
    return TextBoxHelper(htmlHelper, 
          ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model, 
          ExpressionHelper.GetExpressionText(expression), 
          htmlAttributes); 
}