自定义标记助手:如何在属性中使用复杂对象

本文关键字:属性 对象 复杂 自定义 | 更新日期: 2023-09-27 18:01:09

我目前正在开发一个ASP.NET Core自定义标记帮助程序。我需要从属性中读取一个复杂的对象,如下所示:

[型号]

public class Page {
  [HtmlAttributeName(page-size)]
  public int size {get; set;}
}
public class MyControl {
  public Page page {get; set;}
}

[TagHelper类]

[TargetElement("MyControl", Attributes="page-size")]
public class MyControlTagHelper : TagHelper {
  public Page page {get; set;}
  //Here i have process methods.
}

现在我想在视图中获得页面大小值,如下所示:

<MyControl page-size="4"></MyControl>

我不知道该怎么做。到目前为止,我尝试为一个属性提供完整的复杂对象,如本文所示。

如何将复杂对象的值读取为page-size

自定义标记助手:如何在属性中使用复杂对象

从页面类中删除HtmlAttributeName

public class Page {
  public int size{ get;set; }
 }

你不需要MyControl类

将HtmlAttributeName放在taghelper 的PageProperty上

[TargetElement("MyControl", Attributes="page-info")]
public class MyControlTagHelper : TagHelper {
  [HtmlAttributeName("page-info")]
  public Page page{ get;set; }
 //Here i have process methods.
 }

在视图中,放置自定义标记的标记,并从视图模型中传入Page对象

<MyControl page-info="@Model.Page"></MyControl>

现在,您直接在pageinfo属性上传递Page对象,并且可以直接从process方法访问其成员。在处理方法中测试它是否为null,如果为null,则设置输出。SuppressOutput((;回来

您的标记助手类应该如下所示:

[TargetElement("MyControl", Attributes="page-info")]
public class MyControlTagHelper : TagHelper {
  [HtmlAttributeName("page-info")]
  public Page page {get; set;}
  //Here i have process methods.
}

您的查看页面如下:

<MyControl page-info="new Page{size = 2}"></MyControl>

供进一步参考:

  • WebsiteInformationTagHelper.cs源代码
  • About.cshtml源代码
相关文章: