Можно ли передать ModelExpression в TagHelper?

Мы можем получить ModelExpression, используя это свойство в TagHelper:

[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }

Мне каким-то образом удалось * иметь ViewModel со свойством ModelExpression:

public class TemplateViewModel
{
    public ModelExpression For { get; set; }
}

Каждый раз, когда я пытаюсь передать его, выражение модели - это For из TemplateViewModel, а не реальное выражение, которое хранится в For:

@model TemplateViewModel
<input asp-for="@Model.For" class="form-control"/>

Вышеуказанные результаты в:

<input class="form-control" type="text" id="For" name="For" value="Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression" />

Я ожидал, что ввод, который описывается ModelExpression, а не буквально ModelExpression для ModelExpression.

*, поскольку я хочу иметь представление шаблона для TagHelper с использованием IHtmlHelper::PartialView(). Этот пример сильно свернут. Моя основная мотивация - создать единую <form-group for="" /> TagHelper, которая генерирует форму начальной загрузки Группа.


person Christian Gollhardt    schedule 05.11.2017    source источник


Ответы (1)


ModelExpression обрабатывается как особый случай в Razor Compiler, поэтому напрямую работать не будет. Поскольку компилятор имеет открытый исходный код, вы можете предложить патч для игнорирования случаев, когда свойство само является ModelExpression. А пока вам нужно будет использовать другой тип свойства в помощнике тега, чтобы получить ссылку на фактический ModelExpression. Может public Func<ModelExpression> ForAccessor { get; set; }?

person Jeremy Lakeman    schedule 14.06.2018