我有一个扩展方法,可以为日期范围选择器输出 HTML。
public static MvcHtmlString InputGroupDateRangePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression) where TProperty : IDateRange
此扩展方法有一个通用属性 TProperty
,该属性具有 IDateRange
约束。 IDateRange
接口(interface)具有 From
和 To
属性。
我希望能够访问每个 IDateRange
属性,如下所示:
var html = $"<div class=\"input-daterange input-group\">
{htmlHelper.TextBoxFor(expression.From)}
{htmlHelper.TextBoxFor(expression.To)}</div>";
由于表达式
参数是一个表达式函数,我无法访问这些属性。
我最初有两个表达式参数,一个用于 From
属性,另一个用于 To
属性。
Html.InputGroupDateRangePickerFor(x => x.Search.From, x => x.Search.To)
但我只想像这样传入 IDateRange
对象
Html.InputGroupDateRangePickerFor(x => x.Search.DateRange)
最佳答案
可以使用编辑器模板代替:
Views/Shared/EditorTemplates/DateRange.cshtml
@model Services.Models.DateRange
<div class="col-md-12">
<div class="form-group">
@Html.LabelFor(m => m, new { @class = "m-b-none" })
@Html.DescriptionFor(m => m)
<div class="input-daterange input-group" style="width: 100%;">
@Html.TextBoxFor(x => x.From, new{@class="form-control"})
<span class="input-group-addon">to</span>
@Html.TextBoxFor(x => x.To, new{@class="form-control"})
<div class="input-group-addon validation-addon"><i class="fa fa-check-circle green-text validation"></i></div>
</div>
@Html.ValidationMessageFor(m => m, null, new { @class = "validation-message" })
</div>
</div>
用法:
@Html.EditorFor(x => x.SearchCriteria.ExpectedDateOfDecisionRange)
或者为了保持与其他扩展的使用一致,您可以将其包装在一个函数中:
[StringFormatMethod("format")]
public static MvcHtmlString FormGroupDateRangePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, string format = "{0:dd/MM/yyyy}") where TProperty : IDateRange
{
var html = $"{htmlHelper.EditorFor(expression)}";
return new MvcHtmlString(html);
}
所以用法仍然是:
@Html.FormGroupDateRangePickerFor(x => x.SearchCriteria.ExpectedDateOfDecisionRange)
关于c# - 从表达式函数获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58083946/