标签: tag-helpers

如何为剃刀创建自定义标签助手?

我正在尝试在MVC 6中创建自定义标记帮助程序,但无法使其工作.

这是我在Web应用程序项目中定义的演示标记助手类.

namespace Microsoft.AspNet.Mvc.TagHelpers
{
    [TargetElement("demo", Attributes = CustomAttributeName)]
    public class DemoTagHelper : TagHelper
    {
        private const string CustomAttributeName = "asp-custom";

        [HtmlAttributeName(CustomAttributeName)]
        public string Custom { get; set; }

        public string Value { get; set; }


        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "div";
            output.Attributes["foo"] = "bar";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我在我的观点中使用它的方式:

<demo asp-custom="hello world!">
    Please work this time :)
</demo>
Run Code Online (Sandbox Code Playgroud)

我尝试了很多东西.删除了TargetElement属性或更改了命名空间.没有什么变化......结果仍然相同.

顺便说一句,我的Microsoft.AspNet.Mvc.TagHelpers版本是6.0.0-beta4.

也许我必须在某个地方注册我的标签助手?我查看了MVC源代码,他们没有在任何地方引用自己的标记助手.所以我认为不需要注册.

这里的问题在哪里?

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

7
推荐指数
1
解决办法
2864
查看次数

如何从MVC 6中的ASP.Net 5 Tag Helper访问RouteData

我试图抓住当前路线,以便我可以使用Tag Helper突出显示一组链接中的活动页面.

TagHelperContext不允许我访问任何有用的东西.如何获取RouteData的引用?

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

7
推荐指数
1
解决办法
3138
查看次数

如何在asp.net 5中为"asp-for"传递字符串值

我想为具有许多属性的实体编写Edit.cshtml文件,因此我必须多次编写以下代码:

<div class="form-group">
    <label asp-for="Email" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

实际上,有很多实体,所以我必须编写许多Edit.cshtml文件.我想做一些简化

我想在控制器中选择实体的一些属性,并使用循环来显示视图中的属性.例如:在控制器文件中:

public IActionResult Edit(string id)
{
    var model = GetModel(id);
    var propertyNames= new List<string>()
    {
        "Name",
        "Email"
        // add some other property names of the entity 
    };
    ViewData["PropertyList"] = propertyNames;
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

在视图文件中:

@{
    var propertyNames = (List<string>)ViewData["PropertyList"];
    foreach (string item in propertyNames)
    {
        <div class="form-group">
            <label asp-for="@(item)" class="col-md-2 control-label"></label>
            <div class="col-md-3">
                <input asp-for="@(item)" class="form-control" />
                <span asp-validation-for="@(item)" class="text-danger"></span>
            </div> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc razor tag-helpers

7
推荐指数
1
解决办法
2万
查看次数

我应该在asp.net MVC6中为我的所有图像添加asp-append-version ="true"吗?

问题出在标题中.对每个图像使用此标记助手似乎是合乎逻辑的,但如果我确实认为为什么这不是默认值?

这有什么性能影响吗?有没有我不应该用这个标签助手装饰图像的情况?

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

7
推荐指数
1
解决办法
4437
查看次数

混合 C# 和 HTML Helper 标签 ASP.NET MVC 6 (ASP.NET Core)

我在 ASP.NET MVC 6 中使用新的 Helper 标签。

    <form asp-area="DAS"
          asp-controller="Report"
          asp-action="Add"
          asp-route-id="@Model.id"
          asp-route-incBalance="@Model.incBalance"
          asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
          asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
          method="post" role="form">
    </form>
Run Code Online (Sandbox Code Playgroud)

我想路由属性:

asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
Run Code Online (Sandbox Code Playgroud)

仅适用于:

          {
              if (Model.incBalance == 0)
              {
                  asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
              }
          }
Run Code Online (Sandbox Code Playgroud)

结果,我想得到这样的东西:

    <form asp-area="DAS"
          asp-controller="Report"
          asp-action="Add"
          asp-route-id="@Model.id"
          asp-route-incBalance="@Model.incBalance"
          asp-route-dateSet="@Model.dataStart.ToString("yyyy-MM-dd")"
          {
             if (Model.incBalance == 0)
             {
                 asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
             }
          }
          method="post" role="form">
    </form>
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

TagHelper 属性必须格式良好。

          if (Model.incBalance == 0)
Run Code Online (Sandbox Code Playgroud)

标签助手“表单”在元素的属性声明区域中不得包含 C#。

              asp-route-dateNext="@Model.dataEnd.ToString("yyyy-MM-dd")"
Run Code Online (Sandbox Code Playgroud)

我正在使用 Visual Studio 2015 更新 1

更新 1: 我也试过这个选项:

@(Model.incBalance == 0 ? "asp-route-dateNext=" + Model.dataEnd.ToString("yyyy-MM-dd") : string.Empty)
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在: …

c# asp.net-core-mvc tag-helpers asp.net-core asp.net-core-1.0

7
推荐指数
2
解决办法
8746
查看次数

选择 asp-validation-for css 类

我想知道 .NET core 的 asp-validation-for 是否有一种方法可以覆盖在跨度上设置的类,或者是否有一种方法可以扩展标签帮助器以允许这样做。现在,当客户端发生错误时,field-validation-error是放在我的 span 元素上的类。我想知道是否有办法在 .NET Core 中覆盖它,或者我是否必须自己开发/修改它?这似乎是一个愚蠢的缺点,如果没有其他方法来获得我正在寻找的东西,我会感到惊讶。

问题是我正在使用引导程序,当表单未通过验证时,我想向我的错误元素添加一些引导程序类。

css asp.net jquery tag-helpers asp.net-core

7
推荐指数
1
解决办法
1668
查看次数

asp.net核心标记帮助器,用于有条件地将类添加到元素

在Asp.Net MVC中,我们可以有条件地添加类,如下代码:

<div class="choice @(Model.Active?"active":"")">
</div>
Run Code Online (Sandbox Code Playgroud)

如何通过使用tagHelper和删除条件中的其他部分来做到这一点.

tag-helpers asp.net-core

7
推荐指数
1
解决办法
5080
查看次数

将QueryString附加到asp.net核心Anchor Helper Tag中的href

我试图在html结果中向锚点添加请求查询中的任何内容:

虚构的例子:

用户发出请求(请注意,乐队和歌曲可以是任何内容,我有一条路径来满足此请求:模板:"{band}/{song}"):

http://mydomain/band/song?Param1=111&Param2=222
Run Code Online (Sandbox Code Playgroud)

现在我希望我的锚点将查询字符串部分附加到我的锚点的href.所以我试过这样的事情(注意'asp-all-route-data'):

<a asp-controller="topic" asp-action="topic" asp-route-band="iron-maiden" asp-route-song="run-to-the-hills" asp-all-route-data="@Context.Request.Query.ToDictionary(d=>d.Key,d=>d.Value.ToString())">Iron Maiden - Run to the hills</a>
Run Code Online (Sandbox Code Playgroud)

查询字符串的附加实际上与上面的代码一起使用,但随后结果中丢失了"铁娘子"和"跑到山上".上面的标签助手返回以下内容(注意帮助器如何将请求中的乐队和歌曲镜像到href中,而不是我在asp-route属性中指定的乐队和歌曲):

<a href="http://mydomain/band/song?Param1=111&Param2=2222">Iron Maiden - Run to the hills</a>
Run Code Online (Sandbox Code Playgroud)

我希望帮助者得到以下结果:

<a href="http://mydomain/iron-maiden/run-to-the-hills?Param1=111&Param2=2222">Iron Maiden - Run to the hills</a>
Run Code Online (Sandbox Code Playgroud)

看起来当我使用asp-all-route-data时,我在结果中丢失了asp-route-bandasp-route-song值.

有没有人偶然发现了这个?

谢谢

Hooroo

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

7
推荐指数
1
解决办法
1645
查看次数

Razor Pages 中部分标签助手中的“for”和“model”之间的主要区别是什么?

我正在学习 Razor Pages 标签帮助程序并尝试了解部分标签帮助程序的工作原理。我注意到可以使用两个不同的属性将数据传递到部分:formodel

for:“for 属性指定要针对当前模型进行评估的 ModelExpression。”

model:“模型属性分配一个模型实例以传递给分部视图。”

我很难理解这种差异。模型是否只是期望模型的实例,而for期望属性?谁能帮我把这个分解一下吗?

c# tag-helpers razor-pages

7
推荐指数
1
解决办法
379
查看次数

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
查看次数