标签: tag-helpers

从另一个TagHelper调用TagHelpers?

有没有办法让TagHelper呈现另一个TagHelper?

TagHelpers示例;

public class OuterTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "";
        output.Content.SetContent("Hello <inner></inner>");
    }
}

public class InnerTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "";
        output.Content.SetContent("World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

示例视图;

<outer></outer>
Run Code Online (Sandbox Code Playgroud)

预期结果;

Hello World!
Run Code Online (Sandbox Code Playgroud)

我知道我可能应该使用ViewComponent,但是它是否可以实现上面提到的预期行为?

razor tag-helpers asp.net-core

6
推荐指数
1
解决办法
1123
查看次数

Asp.Net Core Tag Helpers 在子目录中不可用

根据文档

@addTagHelper指令使标签助手可用于视图。本例中,视图文件为Views/_ViewImports.cshtml,默认为Views文件夹及子目录下的所有视图文件继承;使标签助手可用。

所以我导入了标签助手Views\_ViewImports.cshtml

@using MyProject
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Run Code Online (Sandbox Code Playgroud)

它们可以很好地处理文件Views夹内的文件。

但是,在文件中Views/Home/Index.cshtml,我不支持标签助手,它们也没有正确呈现为链接。当我将其复制_ViewImports.cshtml到文件夹中时Views/Home,一切都按预期进行。

那么我错过了什么?

更新

那么我错过了什么?我_ViewImports.cshtml被放在文件夹中Views/Shared(d'oh)。将其移至 后Views,TagHelper 在任何地方都按预期工作。

asp.net razor tag-helpers asp.net-core

6
推荐指数
1
解决办法
2438
查看次数

ASP.NET mvc使用IEnumerable模型和输入标记帮助器查看

在这个官方的ASP.NET Core教程中,我可以使用输入标记助手,如下所示.但是由于foreach循环中表单元素已知模型绑定问题,我想改为使用for loop.:如果我是来取代@foreach (var item in Model)@for (int i=0; i < Model.Count(); i++)下面View.我的意思asp-for<input asp-for="???" />什么?出于某种原因,intellisense无法识别,例如Model [i] .BlogId或@Model [i] .BlogId

@model IEnumerable<EFGetStarted.AspNetCore.NewDb.Models.Blog>

@{
    ViewBag.Title = "Blogs";
}

<h2>Blogs</h2>

<p>
    <a asp-controller="Blogs" asp-action="Create">Create New</a>
</p>

<table class="table">
    <tr>
        <th>Id</th>
        <th>Url</th>
    </tr>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                <input asp-for="@item.BlogId" />
            </td>
            <td>
                <input asp-for="@item.Url" />
            </td>
        </tr>
    } …
Run Code Online (Sandbox Code Playgroud)

razor asp.net-core-mvc tag-helpers asp.net-core

6
推荐指数
1
解决办法
1541
查看次数

标签助手 - 自关闭 HTML 标签是一个坏习惯?

我正在合并TagHelpers到我的 MVC vNext 项目中,我意识到当我自己关闭 HTML 标签时它们不起作用。

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"

<label asp-for="FirstName"/> <!-- self closing tag -->

<span asp-validation-for="FirstName"/> <!-- self closing tag -->
Run Code Online (Sandbox Code Playgroud)

而且,当我放置结束标签时,我会看到正在显示的值。

<label asp-for="FirstName"></label>

<span asp-validation-for="FirstName"></span>
Run Code Online (Sandbox Code Playgroud)

生成的 HTML

<label for="FirstName">FirstName</label>
<span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true">
    <span id="FirstName-error" class="">The FirstName field is required</span>
</span>
Run Code Online (Sandbox Code Playgroud)

我想知道什么,它有什么区别?而且,自我关闭配对标签是一个坏习惯。如果您知道一些讨论此设计原则的文章,请与我分享,将不胜感激。

html asp.net-core-mvc tag-helpers

6
推荐指数
1
解决办法
1635
查看次数

在区域视图中使用TagHelpers

我花了最后一小时重构使用区域,现在我的所有视图似乎都没有函数标记:/

所以这就是Index.cshtml中的内容

       <div class="btn-group">
           <a asp-controller="Survey" asp-area="Admin" asp-action="Create" class="btn btn-primary">Create New</a>
       </div>
Run Code Online (Sandbox Code Playgroud)

...这是呈现的HTML:/

<div class="btn-group">
  <a asp-controller="Survey" asp-area="Admin" asp-action="Create" class="btn btn-primary">Create New</a>
</div>
Run Code Online (Sandbox Code Playgroud)

Intellisense甚至不显示asp-前缀,并且asp-属性上的语法突出显示也会丢失.

其他SO问题引用了"asp-route-area",但它只是像其他的一样呈现出verbtim.

这些都在〜/ Views/Name/Index.cshtml中工作正常,将它们移到〜/ Areas/Name/Views/Name /和nopers ......

有什么想法吗?史蒂夫

tag-helpers asp.net-core

6
推荐指数
1
解决办法
1835
查看次数

在TagHelpers中获取属性属性

一些模型属性具有"必需"数据注释,我需要在TagHelper类中读取.

public partial class Sale
{
    [Required]
    public string CustomerId { get; set; }
    ...
Run Code Online (Sandbox Code Playgroud)

在销售视图中,我为客户创建了一个自定义选择:

<customer asp-for="CustomerId " value="@Model.CustomerId"></customer>
Run Code Online (Sandbox Code Playgroud)

在CustomerTagHelper类中有进程方法:

public override void Process(TagHelperContext context, TagHelperOutput output)
{
Run Code Online (Sandbox Code Playgroud)

如果当前绑定属性具有"required"属性,我怎么才能发现?我使用的是asp-net核心.

c# tag-helpers asp.net-core

6
推荐指数
2
解决办法
2048
查看次数

Asp.NET Core 自定义输入标记帮助器渲染重复复选框

我创建了一个继承自 InputTagHelper 的标签助手,如这篇文章/sf/answers/2834275811/中的答案所示。

这是代码

[HtmlTargetElement("input", Attributes = ForAttributeName)]
public class ExrInputTagHelper : InputTagHelper
{
    private const string ForAttributeName = "asp-for";

    [HtmlAttributeName("asp-disabled")]
    public bool IsDisabled { get; set; }

    public ExrInputTagHelper(IHtmlGenerator generator):base(generator) 
    {

    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        if (IsDisabled)
        {
            var d = new TagHelperAttribute("disabled", "disabled");
            output.Attributes.Add(d);
        }
        base.Process(context, output);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是它的用法:

<input asp-for="UsingCreditCard" type="checkbox" asp-disabled="@Model.UsingACH" />
Run Code Online (Sandbox Code Playgroud)

这很有效,但有一个明显的问题。如果输入类型是复选框,则会呈现两次。所有其他输入类型都很好用。为什么会出现这种情况呢?

<input checked="checked" data-val="true" data-val-required="The UsingCreditCard field is required." id="UsingCreditCard" name="UsingCreditCard" type="checkbox" value="true">
<input checked="checked" id="UsingCreditCard" name="UsingCreditCard" …
Run Code Online (Sandbox Code Playgroud)

c# tag-helpers asp.net-core

6
推荐指数
1
解决办法
2749
查看次数

'asp-src-include'无法解析文件

我正在使用ASP.Net Core,打字稿,React和Webpack构建一个Webapp。叫做Ui.WebApp。React应用位于,Ui.WebApp/ClientAppwebpack构建输出到Ui.WebApp/ClientApp/dist。在我中,Startup.cs我包括了

app.UseStaticFiles(new StaticFileOptions {
        FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "ClientApp/dist"))
    }
);
Run Code Online (Sandbox Code Playgroud)

那是有效的,即当我加载样式时_Layout.cshtml<link rel="stylesheet" href="~/main.css" asp-append-version="true" type="text/css" />实际位于其中)Ui.WebApp/ClientApp/dist/main.css。它也适用于我包含为的脚本<script src="~/main.js"></script>

现在,我需要使用名称中的哈希值(即)在webpack中构建脚本main_968495a262da1789981f.js。ASP.Net中的模式是使用<script asp-src-include="~/main_*.js"></script>。但是,从浏览器查看页面时,没有生成的脚本标记,因为我假设ASP.Net找不到与该模式匹配的任何文件(但是我可以在文件浏览器中看到它)。

奇怪的是,当我手动将散列的js文件放入Ui.WebApp/wwwroot(否则我不使用)时,脚本标记正确填充。当我删除文件夹并刷新页面时,他们甚至都呆在那里。

因此,我假设ASP.Net在编译时验证了标记帮助器,因此看不到我在中进行的配置Startup.cs

有什么方法可以使ASP.Net在运行时验证标记助手并选择正确的位置?

webpack tag-helpers asp.net-core asp.net-core-tag-helpers

6
推荐指数
1
解决办法
131
查看次数

EditorFor Tag Helper 在使用 FluentValidator 时不呈现验证属性

我有一个像这样的简单表单,它使用了 @Html.EditorFor 扩展名:

<form method="post">
    @Html.EditorFor(x => x.SystemSettings.EmailFromAddress)
    <submit-button title="Save"></submit-button>
</form>
Run Code Online (Sandbox Code Playgroud)

我想利用 .NET Core 的标签助手,让我的表单看起来像这样:

<form method="post">
    <editor asp-for="SystemSettings.EmailFromAddress"/>
    <submit-button title="Save"></submit-button>
</form>
Run Code Online (Sandbox Code Playgroud)

我最终也想拥有自己的自定义标签助手,这样我就可以做这样的事情:

<text-box asp-for="SystemSettings.EmailFromAddress"></text-box>
Run Code Online (Sandbox Code Playgroud)

我有一个由 @Html.EditorFor 扩展呈现的字符串模板:

@model string
<div class="form-group">
    <label asp-for="@Model" class="m-b-none"></label>
    <span asp-description-for="@Model" class="help-block m-b-none small m-t-none"></span>
    <div class="input-group">
        <input asp-for="@Model" class="form-control" />
        <partial name="_ValidationIcon" />
    </div>
    <span asp-validation-for="@Model" class="validation-message"></span>
</div>
Run Code Online (Sandbox Code Playgroud)

为此,我看到有人实现了一个EditorTagHelper,它看起来像这样:

[HtmlTargetElement("editor", TagStructure = TagStructure.WithoutEndTag,
    Attributes = ForAttributeName)]
public class EditorTagHelper : TagHelper
{
    private readonly IHtmlHelper _htmlHelper;

    private const string …
Run Code Online (Sandbox Code Playgroud)

autofac fluentvalidation tag-helpers asp.net-core

6
推荐指数
1
解决办法
399
查看次数

如何编写包含其他标记帮助程序的自定义ASP.NET 5标记帮助程序

我一直在谷歌上看标签上的例子,但找不到我正在寻找的任何例子.

我有以下代码:

<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

  1. 可能吗?
  2. 如果可能的话,提供上面的代码示例

编辑:这与在自定义标记中存储变量不同,但我想调用其他自定义标记或现有标记.

asp.net-core-mvc tag-helpers asp.net-core

5
推荐指数
1
解决办法
1506
查看次数