Тег помощник не знает ни о чем, кроме того, что вы предоставите в качестве входных данных для его атрибутов. Итак, вы хотите создать вспомогательный тег, который можно использовать следующим образом:
@model WebApplication4.Models.Sale
...
<customer asp-for="CustomerId" />
Тогда вы бы объявить свойство типа ModelSource
, связанного с атрибутом asp-for
. Это даст вам доступ к не только стоимости имущества, но и метаданные, как следующее (и больше!): Значение
- свойства:
source.Model
- Имя свойства:
source.Name
- контейнера типа модели:
source.Metadata.ContainerType
- требуется копаться флаг:
source.Metadata.IsRequired
Вы также получите intellisen se в VS, чтобы выбрать одно из свойств в вашей модели для модели asp-for
, и она выдает ошибку, если значение isnt не является именем свойства модели.
В качестве примера, посмотрите на этот тег помощника:
public class CustomerTagHelper: TagHelper
{
[HtmlAttributeName("asp-for")]
public ModelExpression Source { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "p";
output.TagMode = TagMode.StartTagAndEndTag;
var contents = [email protected]"
Model name: {Source.Metadata.ContainerType.FullName}<br/>
Property name: {Source.Name}<br/>
Current Value: {Source.Model}<br/>
Is Required: {Source.Metadata.IsRequired}";
output.Content.SetHtmlContent(new HtmlString(contents));
}
}
Тогда, если бы эти 2 модели:
public class Sale
{
[Required]
public string CustomerId { get; set; }
}
public class Promotion
{
public string CustomerId { get; set; }
}
, которые используются в этих 2-х действиях и взглядов :
public IActionResult Sale()
{
return View();
}
@model WebApplication4.Models.Sale
...
<customer asp-for="CustomerId" />
public IActionResult Promotion()
{
return View(new Models.Promotion { CustomerId = "abc-123" });
}
@model WebApplication4.Models.Promotion
...
<customer asp-for="CustomerId" />
Производит эти Выходы:
Tag helper for: WebApplication4.Models.Sale
Property name: CustomerId
Current Value:
Is Required: True
Model name: WebApplication4.Models.Promotion
Property name: CustomerId
Current Value: abc-123
Is Required: False
Вместо «Source.Metadata.IsRequired» Я использую «For.Metadata.IsRequired». Работает. – Beetlejuice
Да, какое бы имя вы не использовали fpr свойство типа 'ModelExpression' –
Как насчет доступа к другим атрибутам? – HamedH