自定义taghelper - 如何在属性中使用复杂对象?

时间:2015-07-06 13:13:07

标签: c# asp.net-core asp.net-core-mvc tag-helpers

我目前正致力于ASP.Net 5 custom taghelper,我达成了以下要求。 1.需要从属性中读取复杂对象,如下所示。

[模型]

 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.
}

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

但我不知道如上所述。到目前为止,我尝试过能够为属性提供完整的复杂对象,如下面的链接所示

http://www.mikesdotnetting.com/Article/275/custom-taghelpers-in-asp-net-mvc-6

那么我怎样才能将复杂的属性值读作page-size

2 个答案:

答案 0 :(得分:6)

从Page class

中删除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.
 }
在您的视图中

为您的自定义标记添加标记,并从您的viewmodel传入Page对象

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

现在您直接在page-info属性上传递Page对象,您可以直接从process方法访问其成员。在process方法中测试它为null,如果为null则只设置output.SuppressOutput();返回;

答案 1 :(得分:3)

TagHelper Class如下

[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>

如需进一步参考,请在下面找到链接

https://github.com/aspnet/Mvc/blob/2a28e6f4ce80cbbb54acbb0e8f9f9cf6f7f08e1a/test/WebSites/TagHelpersWebSite/TagHelpers/WebsiteInformationTagHelper.cs

https://github.com/aspnet/Mvc/blob/4bb85eeaeb479edf8abff34e9078886c14d32861/test/WebSites/TagHelpersWebSite/Views/Home/About.cshtml