我的项目使用.net core 2.0 MVC,我正在使用剃须刀,但我需要一些帮助。
我试图替换此代码:
<div class="form-group">
<label asp-for="Address" class="control-label"></label>
<input asp-for="Address" class="form-control" />
<span asp-validation-for="Address" class="text-danger"></span>
</div>
通过标记帮助程序,让我编写类似:
的内容<add-edit-form-group ##Address##></add-edit-form-group>
我已经使文件夹TagHelpers
添加了一个文件,并且使用此代码它几乎可以工作,当然我需要一些帮助,将参数传递给标记帮助器,然后处理删除字符串并添加代码。 / p>
帮助代码是:
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
using WebApp.Models;
namespace WebApp.TagHelpers
{
public class AddEditFormGroupTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
StringBuilder html = new StringBuilder();
html.Append("<div class=\"form-group\">");
html.Append("<label asp-for=\"Address\" class=\"control-label\"></label>");
html.Append("<input asp-for=\"Address\" class=\"form-control\" />");
html.Append("<span asp-validation-for=\"Address\" class=\"text-danger\"></span>");
html.Append("</div>");
output.Content.SetHtmlContent(html.ToString());
}
}
}
答案 0 :(得分:1)
这不是那么简单。我建议研究一些现有标记助手的来源,例如InputTagHelper
。有类似的财产:
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
这是捕获属性以将输入绑定到。
的内容此外,您需要一个IHtmlGenerator
,它应该注入标签助手:
protected IHtmlGenerator generator;
public MyAwesomeTagHelper(IHtmlGenerator generator)
{
this.generator = generator;
}
要实际使用它,您还需要ViewContext
的副本,可以注入属性:
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
完成所有这些后,您可以执行以下操作,为您的输入,标签等生成代码。
var input = generator.GenerateTextBox(ViewContext, For.ModelExplorer, For.Name, For.Model, For.Metadata.EditFormatString, null);
然而,使用IHtmlGenerator
不是为了轻松。这是相当低级的。此外,您必须准确生成您需要的内容。例如,在上面的内容中,无论播放类型如何,您最终都会输入type="text"
。如果你有一个布尔值而你需要一个复选框,那么你需要调用一个完全不同的生成器方法。这意味着您必须完成所有逻辑,以确定自己为哪种类型生成的元素,包括考虑添加到属性中的DataTypeAttribute
之类的内容。
您可以通过从InputTagHelper
继承您的代码帮助程序来缩短部分工作,但这仍然无法帮助您处理textareas,choose等内容。
坦率地说,直到或者如果Microsoft提供了一种从其他标记帮助程序中呈现标记帮助程序的方法(目前不可能),我会说尝试为此创建标记帮助程序将比它更麻烦和努力。价值。如果您只想减少代码重复,您仍然可以像以前在MVC中使用编辑器模板一样,或者只使用部分视图。如果你沿着标签帮助路线走下去,你很大程度上是靠自己的。
答案 1 :(得分:0)
1.在课程定义之前添加[HtmlTargetElement("my-first-tag-helper")]
2.关于标签助手本身 - 添加标签的名称和模式:
output.TagName = "CustumTagHelper";
output.TagMode = TagMode.StartTagAndEndTag;
3.将标记助手注册到_ViewImports.cshtml文件中:
@addTagHelper *, CustomTagHelper
4.现在可以将其添加到视图中:
<div class="row">
<my-first-tag-helper>
</my-first-tag-helper>
</div>