Я новичок в Expressions, но мне очень удобно с C#. На самом базовом c уровне я понимаю выражения, но я изо всех сил пытаюсь применить их практически.
Я пытаюсь добавить метод HtmlHelper для создания флажка, который объединяет несколько «общих» помощников методы [для меня].
Требования:
- Использование встроенного класса SelectListItem (Microsoft.AspNetCore. Mvc .Rendering)
- Поддержка страницы бритвы ( Получение / публикация) перенос значений модели ( например Скрытое поле и отключено)
- Поддержка "Отключено", например затемнение текста и флажок отключения
- Поддержка глобализации через DataAnnotations ( например, [Display (Name = "CaptureResponses", ResourceType = typeof (NotificationUI))]))
- Поддержка LabelFor , которую можно нажать для нажатия текст метки флажка
- 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