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

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

<input asp-for="this_part" />

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

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

谢谢!

【问题讨论】:

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


    【解决方案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]
    猜你喜欢
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2016-03-08
    • 2018-06-18
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多