Asp.Net 5 TagHelper 模型状态绑定

Posted

技术标签:

【中文标题】Asp.Net 5 TagHelper 模型状态绑定【英文标题】:Asp.Net 5 TagHelper Modelstate binding 【发布时间】:2015-07-27 13:36:59 【问题描述】:

我正在尝试制作一个绑定到当前 ModelState 的自定义 TagHelper,就像

<input asp-for="this_part" />

我想从我的自定义 TagHelper 类中进行一些 ModelState 验证。

尝试搜索 Github 存储库,但无法查明此确切行为。有人找到方法了吗?

谢谢!

【问题讨论】:

【参考方案1】:

我不确定您在寻找什么,但DefaulthtmlGenerator does something similar for validation messages。

您可以通过ViewContext 访问ModelState(示例改编自ValidationMessageTagHelper.cs):

[TargetElement("span", Attributes = AttributeName)]
public class YourTagHelper : TagHelper

    private const string AttributeName = "your-for";

    [ViewContext]
    [HtmlAttributeNotBound]
    protected internal ViewContext ViewContext  get; set; 

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    
        var modelState = ViewContext.ViewData.ModelState;
        // Your logic here
    

从您的 cmets 中,您提到您需要智能感知来映射到模型属性。 ValidationMessageTagHelper.cs 使用此属性执行此操作:

[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For  get; set; 

【讨论】:

谢谢。这几乎是我想要的,因为它有助于模型状态验证。然而;当输入 html 元素的“for”属性时,这不会带来模型智能感知。通过添加以下代码,我得到了“for”属性的值: [HtmlAttributeName("for")] public string AttributeFor get;放; ,但没有智能感知。也许它应该是不同于“字符串”的类型? 更新了我的回答,以便您回答您的后续问题。这是你要找的吗? 太棒了!谢谢马特 根据github.com/aspnet/Announcements/issues/28,[Activate] 将在 beta-5 中消失。 从 beta-5 开始,您可以使用 [HtmlAttributeNotBound] [ViewContext] 代替 [Activate]

以上是关于Asp.Net 5 TagHelper 模型状态绑定的主要内容,如果未能解决你的问题,请参考以下文章

[十一] ASP.NET Core 中的 Taghelper

复杂对象和模型绑定器 ASP.NET MVC

Asp.Net Core 入门—— Taghelper

将自定义模型绑定器应用于 asp.net 核心中的对象属性

Asp.net Core 模型绑定器接受布尔类型的随机整数

为啥 ASP.Net MVC 模型绑定器将空 JSON 数组绑定到 null?