我对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()
都返回一个空字符串:(
答案 0 :(得分:1)
您需要使用SetAttribute
:
output.Attributes.SetAttribute("value", "hello");