将未知数量的htmlAttributes添加到C#MVC HtmlHelper中

时间:2013-02-09 00:51:43

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

免责声明:我做过一些研究,我能找到的最接近的问题是:How to Support htmlAttributes Parameters in HtmlHelper Extensions?

我正在尝试编写一个新的DatePickerFor,它使用一组自定义htmlAttributes调用TextBoxFor。这纯粹是为了节省我每次想要使用DatePicker时都必须添加属性。

到目前为止,我已经:

public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        return htmlHelper.TextBoxFor(expression, new { @class = "datepicker", data_date_weekStart = 1, data_date_format = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower() });
    }

我设法让它工作正常。棘手的一点是当我开始在我的DatePickerFor上添加额外的参数时。比方说,我想要有以下签名:

    public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, DateTime earliest)

此方法应该与上面的方法几乎相同,但它应该为data_startDate添加另一个htmlAttribute,如:

return htmlHelper.TextBoxFor(expression, new { @class = "datepicker", data_date_weekStart = 1, data_date_format = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower(), data_startDate = earliest.ToShortDateString() });

我如何创建方法签名,并伴随对TextBoxFor的调用,该调用需要未知的参数组合?最初我可能希望:

  • 开始日期
  • 结束日期
  • StartDate和EndDate
  • StartDate和AllowWeekendSelection
  • EndDate和AllowWeekendSelection
  • StartDate和EndDate以及AllowWeekendSelection

依旧......

我想我可以编写一个方法签名来获取每个参数,以及一个如上所述调用TextBoxFor的实现,为该特定方法签名添加所有相关属性。但这有点强烈打破干旱规则。

有人能提供一些见解吗?

1 个答案:

答案 0 :(得分:0)

你能不能只使用可选参数? http://msdn.microsoft.com/en-us/library/dd264739.aspx