Использование выражения для создания моего пользовательского HtmlHelper MyCheckboxFor - PullRequest
0 голосов
/ 08 апреля 2020

Я новичок в Expressions, но мне очень удобно с C#. На самом базовом c уровне я понимаю выражения, но я изо всех сил пытаюсь применить их практически.

Я пытаюсь добавить метод HtmlHelper для создания флажка, который объединяет несколько «общих» помощников методы [для меня].

Требования:

  1. Использование встроенного класса SelectListItem (Microsoft.AspNetCore. Mvc .Rendering)
  2. Поддержка страницы бритвы ( Получение / публикация) перенос значений модели ( например Скрытое поле и отключено)
  3. Поддержка "Отключено", например затемнение текста и флажок отключения
  4. Поддержка глобализации через DataAnnotations ( например, [Display (Name = "CaptureResponses", ResourceType = typeof (NotificationUI))]))
  5. Поддержка LabelFor , которую можно нажать для нажатия текст метки флажка
  6. ValidationMessageFor поддержка

Модель

...
[Display(Name = "CaptureResponses", ResourceType = typeof(NotificationUI))]
public SelectListItem CaptureResponse { get; set; } = new SelectListItem(
...

Razor Page

...
@Html.MyCheckboxFor(m => Model.SetDeliveryMethodsViewModel.CaptureResponse)
...

HtmlExtensions.cs

...
public static IHtmlContent MyCheckboxFor<TModel, SelectListItem>(
        this IHtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, SelectListItem>> expression,
        object htmlAttributes = null)
{
    if (htmlHelper == null) { throw new ArgumentNullException(nameof(htmlHelper)); }
    if (expression == null) { throw new ArgumentNullException(nameof(expression)); }

    MemberExpression memberExpression = (MemberExpression)expression.Body;
    var propName = memberExpression.Member.Name;
    var member = memberExpression.Member as PropertyInfo;
    var attributes = member.GetCustomAttributes();

    // item is of type SelectListItem
    var item = expression.Compile()*XXXXXXX*; 

    TagBuilder tagBuilder = new TagBuilder("div");

    tagBuilder.AddCssClass("form-group");

    tagBuilder.InnerHtml.AppendLine(htmlHelper.HiddenFor(expression));
    tagBuilder.InnerHtml.AppendLine(htmlHelper.LabelFor(expression, new { @class = "control-label" }));
    //tagBuilder.InnerHtml.AppendLine(htmlHelper.CheckBoxFor(item.Selected, htmlAttributes);
    tagBuilder.InnerHtml.AppendLine(htmlHelper.CheckBoxFor())
    tagBuilder.InnerHtml.AppendLine(htmlHelper.ValidationMessageFor(expression, "", new { @class = "text-danger" }));

    return tagBuilder.GetHtmlString();
}

Как получить / разыграть поле т o SelectListItem?

Спасибо за любую помощь -Jason

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...