標籤助手不知道比你提供什麼樣的作爲其屬性輸入的任何其他。所以,你要創建一個可以使用如下標籤幫手:
@model WebApplication4.Models.Sale
...
<customer asp-for="CustomerId" />
然後,你將宣佈與asp-for
屬性相關聯ModelSource
類型的屬性。這將讓你訪問不只是財產的價值,而且元數據,如下面的(和更多!):
- 屬性值:
source.Model
- 屬性名稱:
source.Name
- 容器模型類型:
source.Metadata.ContainerType
- IsRequired標誌:
source.Metadata.IsRequired
您也將獲得intellisen在VS中選擇asp-for
模型的模型中的一個屬性,如果該值不是模型屬性的名稱,則會引發錯誤。
舉個例子,看看這個標籤幫手:
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; }
}
這是在這兩個動作,並享有使用:
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