【问题标题】:Adding an unknown number of htmlAttributes to a C# MVC HtmlHelper将未知数量的 htmlAttributes 添加到 C# MVC HtmlHelper
【发布时间】:2013-02-09 00:51:43
【问题描述】:

免责声明:我已经做了一些研究,我能找到的最接近我正在尝试做的现有问题是: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 和 AllowWeekendSelection
  • EndDate 和 AllowWeekendSelection
  • StartDate 和 EndDate 以及 AllowWeekendSelection

等等……

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

谁能提供一些见解?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 和命名参数。还有那个需要 htmlAttributes 字典的重载...
    • 我可以看到如何在我的方法签名中使用可选参数,但我将如何选择将这些参数添加到 htmlAttributes 匿名对象中?会不会是忘记匿名对象并根据其他帖子使用 RouteValueDictionary 的情况? HtmlHelper.AnonymousObjectToHtmlAttributes() 返回 RouteValueDictionary 是否正确?抱歉听起来如此密集,我还是 MVC 的新手!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多