0

免责声明:我已经做了一些研究,我能找到的最接近的现有问题是:如何在 HtmlHelper 扩展中支持 htmlAttributes 参数?

我正在尝试编写一个新的 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 和 AllowWeekendSelection
  • EndDate 和 AllowWeekendSelection
  • StartDate 和 EndDate 和 AllowWeekendSelection

等等...

我想我可以编写一个接受每个参数的方法签名,以及一个像上面那样调用 TextBoxFor 的实现,为该特定方法签名添加所有相关属性。但这闻起来很强烈,违反了 DRY 规则。

谁能提供一些见解?

4

1 回答 1

0

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

于 2013-02-09T00:58:13.513 回答