我在TagHelper类的处理方法中生成脚本,如下所示
[TargetElement("MyTag")]
public Class MYClass: TagHelper{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
StringBuilder builder = new StringBuilder();
builder.Append("<script>");
builder.Append("//some javascript codes here);
builder.Append("</script>");
output.Content.Append(builder.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
现在,它会将脚本放置在tag元素旁边,作为其兄弟。
我需要将脚本放在正文部分的末尾。
我一直在谷歌上看标签上的例子,但找不到我正在寻找的任何例子.
我有以下代码:
<div class="form-group">
<label asp-for="PersonName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="PersonName" class="form-control" />
<span asp-validation-for="PersonName" class="text-danger"></span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我要做的是用类似的东西替换它
<bootstraprow asp-for="PersonName"></bootstraprow>
Run Code Online (Sandbox Code Playgroud)
但是,我不确定要编写包含其他标记的taghelper
编辑:这与在自定义标记中存储变量不同,但我想调用其他自定义标记或现有标记.
在 Core MVC 中,有一个新的概念作为标签助手。
我们之前可以创建自定义 html 帮助程序,以根据验证数据注释(例如 [Required])附加一些类。
作为 TagHelpers arq 相当新的领域,我找不到足够的资源来实现以下目标:
这是视图模型:
[Required]
public Gender Gender { get; set; }
Run Code Online (Sandbox Code Playgroud)
看法:
<label class="control-label col-md-3 required" asp-for="Gender"></label>
Run Code Online (Sandbox Code Playgroud)
css:
.required:after {
content: "*";
font-weight: bold;
color: red;
}
Run Code Online (Sandbox Code Playgroud)
但我不想在标签中手动添加所需的 css 类。不知何故,我应该能够扩展 LabelTagHelper 以读取模型数据注释,如果它具有 [Required] 则在标签元素中添加所需的类。
谢谢,
Tag Helper是Asp.Net Core的一个很好的功能.我创建了几个标记助手,它们可以提供超级帮助.
现在我想尝试一些更高级的东西.标记辅助属性具有以属性值是模型属性的方式创建的能力.
这方面的例子如下:
//model
public class MyModel{
public int MyField {get;set;} = 10;
}
//in the view
@model MyModel
...
<input asp-for="MyField" />
Run Code Online (Sandbox Code Playgroud)
在上面的示例asp-for中,input标记定向的标记帮助程序引用模型中的属性.该文件说,
asp-for属性值是ModelExpression和lambda表达式的右侧.因此,asp-for ="Property1"在生成的代码中变为m => m.Property1,这就是为什么你不需要使用模型前缀的原因.
所以这很酷,并且相同的文档似乎称之为"表达式名称".
如何在我自己的自定义标记帮助器中创建这样的属性?
如果我有这样的视图模型:
public class MyModel{
public DateTime? StartDate {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在视图上,输入标记与asp-for标记助手一起使用,如下所示:
<input asp-for="StartDate" />
Run Code Online (Sandbox Code Playgroud)
由此生成的默认html是
<input type="datetime" id="StartDate" name="StartDate" value="" />
Run Code Online (Sandbox Code Playgroud)
但我希望它生成的是html,如下所示:
<input type="datetime" id="startDate" name="startDate" value="" />
Run Code Online (Sandbox Code Playgroud)
如何让asp-for输入标签帮助器生成像上面这样的驼峰案例名称,而不必使我的模型属性为camelCase?
在标签助手中,我们可以访问标签内部的 HTML。
<!-- Index.cshtml -->
<my-first>
This is the original Inner HTML from the *.cshtml file.
</my-first>
// MyFirstTagHelper.cs > ProcessAsync
var childContent = await output.GetChildContentAsync();
var innerHtml = childContent.GetContent();
Run Code Online (Sandbox Code Playgroud)
如果我们调用视图组件作为标签助手,我们如何访问内部 HTML?
<vc:my-first>
This is the original Inner HTML from the *.cshtml file.
</vc:my-first>
// MyFirstViewComponent.cs > InvokeAsync()
var innerHtml = DoMagic();
Run Code Online (Sandbox Code Playgroud)
一些进一步的想法:
我很欣赏我们可以通过 HTML 属性将任意内容传递给视图组件。但是,在文本量非常大的情况下,这可能变得不切实际,在这种情况下,内部 HTML 会更具可读性并且具有更好的工具支持。
有些人可能还会说,“那么为什么不直接使用标签助手呢?” 好吧,我们想要将视图与标签助手关联起来,而标签助手不支持视图;相反,标签助手要求我们以编程方式构建所有 HTML。
所以我们陷入了困境。一方面,我们想要一个标签助手,但它们不支持视图;另一方面,我们可以使用视图组件作为标签助手,但视图组件可能不允许我们访问内部 HTML。
asp.net-core-mvc tag-helpers asp.net-core asp.net-core-mvc-2.0 asp.net-core-viewcomponent
我有一个 for 循环来在表单上生成字段。
如何根据当前索引设置asp-for的值?
<label asp-for=@("Value" + i) class="control-label"></label>不起作用。
我正在尝试解决这个问题,除了.Net Core 2。
我可以在返回 html 的自定义标记帮助程序中使用标记帮助程序吗?
“我想在标签助手中使用标签助手。我环顾四周,找不到其他人尝试这样做,我是否使用了糟糕的约定,或者我是否缺少文档?
前任。标签助手 A 输出包含另一个标签助手的 HTML。”
我该如何解决下面的编译错误?
[HtmlTargetElement("tag-name")]
public class RazorTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
StringBuilder sb = new StringBuilder();
sb.Append("<a asp-action=\"Home\" ");
output.Content.SetHtmlContent(sb.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我从 C# 处理标签助手?或者使用标签助手重新处理输出 HTML?”
尝试了泰勒·马伦的这个标记解决方案:
var anchorTagHelper = new AnchorTagHelper
{
Action = "Home",
};
var anchorOutput = new TagHelperOutput("a", new TagHelperAttributeList(), (useCachedResult, encoder) => new HtmlString());
var anchorContext = new TagHelperContext(
new TagHelperAttributeList(new[] { new TagHelperAttribute("asp-action", new HtmlString("Home")) }),
new Dictionary<object, …Run Code Online (Sandbox Code Playgroud) 是否可以在标签帮助器 Process 方法(.NET Core MVC)中获取整个视图模型?
我知道asp-foran 的标签助手<input>设置name属性,以便它可以绑定到模型类。例如asp-for="Movie.Year",当从 POST 请求检索数据时...
在另一种情况下(可能是 GET 请求):还从模型类实例中asp-for提取每个s 值,并在通过 PageModel 派生类实例化后基于它填充属性。<input>value
例如
<input asp-for="Movie.Price" class="form-control" />
Run Code Online (Sandbox Code Playgroud) tag-helpers ×10
asp.net-core ×7
c# ×2
razor ×2
.net-core ×1
asp.net ×1
asp.net-mvc ×1
css ×1
html ×1