asp.net core TagHelper - 如何更改value属性

时间:2017-08-31 10:00:50

标签: c# asp.net-core

我对asp.net core(2.0)TagHelpers感到困惑。我有一个TagHelper,它扩展了asp-for标记帮助程序功能,可用于向表单添加输入字段。

我想在执行默认的asp-for helper之前更改最终html的value属性。这是我的属性:

[HtmlTargetElement("input", Attributes = "asp-for")]
public class DateTagHelper : TagHelper
{
    [HtmlAttributeName("asp-for")]
    public ModelExpression For { get; set; }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        // Process the asp-for as normal - this will set the id,name,value attributes of the input element based on the model
        base.Process(context, output);

        // Now I want to change the value attribute here
        // output.Attributes["value"] = "hello" -- won't work :(
    }

}

问题是我无法更改属性 - 它是只读的。我只能添加新属性。

我有一个狡猾的计划,将最终渲染的输出作为字符串,然后在那里更改,如下所示:

var childContent = output.Content.IsModified ? output.Content.GetContent() :
        (await output.GetChildContentAsync()).GetContent();

var newContent = // Do some string replacing here with childContent..

output.Content.SetHtmlContent(newContent);

但是output.Content.GetContent()(await output.GetChildContentAsync()).GetContent()都返回一个空字符串:(

1 个答案:

答案 0 :(得分:1)

您需要使用SetAttribute

output.Attributes.SetAttribute("value", "hello");