gpt4 book ai didi

c# - 为 asp-for 指定自定义名称(仅需要子属性)

转载 作者:行者123 更新时间:2023-12-03 22:17:52 26 4
gpt4 key购买 nike

假设我有这个代码:

<input type="hidden" asp-for="CurrentThread.ThreadId" />
这将生成一个名为 CurrentThread_ThreadId 的隐藏输入。 .但是,我希望名称为 "ThreadId"只要。基本上,想忽略任何父类,只想要最后一个属性的名称。
我可以轻松做到:
<input type="hidden" asp-for="CurrentThread.ThreadId" name="ThreadId" />
但是,我正在失去智能。
我只是想知道是否有什么办法可以生成名称 "ThreadId"与智能感知。

最佳答案

您可以扩展现有的输入标签助手来为 name 设置自定义值。属性。

[HtmlTargetElement("input", TagStructure = TagStructure.WithoutEndTag)]
public class MyTagHelper : Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper
{
[HtmlAttributeName("asp-short-name")]
public bool IsShortName { set; get; }

public MyTagHelper(IHtmlGenerator generator) : base(generator)
{
}

public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (IsShortName)
{
string nameAttrValue = (string)output.Attributes.Single(a => a.Name == "name").Value;
output.Attributes.SetAttribute("name", nameAttrValue.Split('.').Last());
}
base.Process(context, output);
}
}

要注册您的自定义标签助手,您需要添加到 _ViewImports.cshtml :
@addTagHelper *, [AssemblyName]

然后你可以使用它:
<input type="hidden" asp-for="CurrentThread.ThreadId" asp-short-name="true"/>

注:正如@Stephen Muecke 指出的那样,默认模型绑定(bind)将不起作用。您可能需要创建自定义模型绑定(bind)器或使用其他技术从请求中检索模型值

关于c# - 为 asp-for 指定自定义名称(仅需要子属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com