是否可以创建自定义ASP.NET MVC强类型HTML帮助程序?

时间:2010-01-23 06:49:54

标签: c# .net asp.net asp.net-mvc html-helper

我想知道是否可以在ASP.NET MVC 2中创建自定义强类型HTML Helper?创建一个常规(读取非强类型)帮助器很简单,但我很难创建强类型版本。例如,我想创建一个DatePickerFor html帮助器...

任何指导或片段都将不胜感激, 先感谢您! JP

3 个答案:

答案 0 :(得分:14)

好的,我想出来了(这很简单......)。发布我的一个重载,以防其他人遇到这个问题。

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
  where TModel : class
{
    var inputName = ExpressionHelper.GetExpressionText(expression);
    return htmlHelper.DatePicker(inputName);
}

答案 1 :(得分:4)

我只是尝试了以下内容来创建一个强类型的CKEditor助手,它似乎完美无缺。这假设您已经在项目中包含了jquery和必要的ckeditor脚本。看看也设置ckeditor配置可能会很好,但这满足了我目前的需求。

    public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value, object htmlAttributes)
    {
        var output = htmlHelper.TextArea(name, value, htmlAttributes).ToString();
        output += string.Format("<script type=\"text/javascript\">$(document).ready(function(){{ $('#{0}').ckeditor(); }});</script>", name);

        return MvcHtmlString.Create(output);
    }

    public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value)
    {
        return htmlHelper.CkEditor(name, value, null);
    }

    public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) where TModel : class
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        return htmlHelper.CkEditor(metadata.PropertyName, metadata.Model as string, htmlAttributes);
    }

    public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
    {
        return htmlHelper.CkEditorFor(expression, null);
    }

答案 2 :(得分:1)

public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
  where TModel : class
{
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    return htmlHelper.DatePicker(metadata.PropertyName);
}

我使用了ModelMetadata,如果你为datepicker创建一个日期时间模板,它也会起作用。