标签: tag-helpers

MVC 6标记助手作为编辑器模板的替代品

MVC 6引入了Tag Helpers作为@ Html.EditorFor的更好替代品.可以创建自定义编辑器模板.也可以创建自定义Tag Helper.

但是,在创建Tag Helper时,需要通过C#代码(使用TagBuilder等)创建HTML.对于复杂的Tag Helpers,它不如使用Razor语法那么方便.

有没有什么方法可以让我从Razor页面创建自定义Tag Helper?

asp.net-core-mvc tag-helpers

13
推荐指数
1
解决办法
6041
查看次数

MVC 6 Tag Helpers Intellisense?

是否应该asp-在Razor/MVC 6中为新标签助手提供Intellisense ?我正在关注Shawn Wildermuth的一个关于Pluralsight的课程并且一切正常,但我认为当我开始asp-在标签上作为属性打字时我应该得到智能感知.

如果它应该在那里你有什么可能导致它消失的想法?

我正在使用Visual Studio 2015社区,以及针对Kestrel,Mvc和TagHelpers的.Net依赖项的RC1-Final版本.

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

13
推荐指数
2
解决办法
4938
查看次数

将CSS类添加到TagHelper中的html元素

在ASP.NET核心视图中,我有以下内容:

<div class="message" message=""></div>
Run Code Online (Sandbox Code Playgroud)

我是一个带有以下TagHelper的Tag Helper:

[HtmlTargetElement("div", Attributes = MessageName)]
public class MessageTagHelper : TagHelper {

  private const String MessageName = "message";

  [HtmlAttributeName(MessageName)]
  public String Message { get; set; }

  [HtmlAttributeNotBound, ViewContext]
  public ViewContext ViewContext { get; set; }


  public override void Process(TagHelperContext context, TagHelperOutput output) {

    String message;
    Boolean defined = ViewContext.HttpContext.Request.Cookies.TryGetValue("_message", out message);

    if (defined) {
      ViewContext.HttpContext.Response.Cookies.Delete("_message");
      output.Attributes.Add("class", "active");
      output.Content.Append(message);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在下面的代码行中,我需要将"active"添加为CSS Class.

output.Attributes.Add("class", "active");
Run Code Online (Sandbox Code Playgroud)

但是,这没有任何作用.消息仅保留在类"消息"中.

我错过了什么?

c# tag-helpers asp.net-core

11
推荐指数
3
解决办法
5273
查看次数

自闭式TagHelper合并兄弟元素的html标记

我对TagHelper在ASP.NET Core MVC 中引入的行为感到困惑.按照本教程一个有效的电子邮件Tag Helper,我们有机会编写自动关闭标签.根据这篇文章,我们应该使用attbute HtmlTargetElement.下面的类是示例:

 [HtmlTargetElement("email", TagStructure = TagStructure.WithoutEndTag)]
public class EmailTagHelper : TagHelper
{
    private const string EmailDomain = "contoso.com";
    public string MailTo { get; set; }
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "a";
        var address = MailTo + "@" + EmailDomain;
        output.Attributes.SetAttribute("href", "mailto:" + address);
        output.Content.SetContent(address);
    }
}
Run Code Online (Sandbox Code Playgroud)

剃刀视图中的标记如:

<strong>Support:</strong>
    <email mail-to="Support"/><br />
<strong>Marketing:</strong>
    <email mail-to="Marketing"/>
Run Code Online (Sandbox Code Playgroud)

但我有意想不到的输出:

<strong>Support:</strong>
<a href="mailto:Support@contoso.com">
    <span>Another content</span>
    <strong>Marketing:</strong>
</a>
<a href="mailto:Marketing@contoso.com"></a>
Run Code Online (Sandbox Code Playgroud)

为什么第一个锚标记包含<span> …

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

10
推荐指数
1
解决办法
281
查看次数

将TagHelpers嵌套在ASP.NET Core MVC中

ASP.NET Core TagHelper文档提供了以下示例:

public class WebsiteContext
{
    public Version Version { get; set; }
    public int CopyrightYear { get; set; }
    public bool Approved { get; set; }
    public int TagsToShow { get; set; }
}

[TargetElement("website-information")]
public class WebsiteInformationTagHelper : TagHelper
{
    public WebsiteContext Info { get; set; }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "section";
        output.Content.SetContent(
            $@"<ul><li><strong>Version:</strong> {Info.Version}</li>
            <li><strong>Copyright Year:</strong> {Info.CopyrightYear}</li>
            <li><strong>Approved:</strong> {Info.Approved}</li>
            <li><strong>Number of tags to show:</strong> {Info.TagsToShow}</li></ul>");
        output.TagMode = TagMode.StartTagAndEndTag;
    } …
Run Code Online (Sandbox Code Playgroud)

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

9
推荐指数
2
解决办法
5821
查看次数

在MVC 6中,如何在视图中编码复选框列表并将选中的值传递给控制器​​?

抱歉,我的大多数搜索都会将我带到旧的MVC代码.任何帮助将不胜感激.

在带有标记帮助器的MVC 6中,如何编写一组复选框:

  • 使用标签帮助器作为标签,因此单击它将切换选中的值
  • 将选中的值保存(绑定?)到IsOptionSelected属性
  • 单击"提交"后,将这些选中的值传递回Controller

我能够正确显示带有标签的复选框,但我不知道如何通过模型将选中的值传递回控制器.现在,IsOptionSelected值返回false.

我还能够为标签工作制作html帮助器,但不能为标签帮助器制作.我可能也编码这些都错了所以任何提示都会有所帮助!

这是我到目前为止所拥有的:

显示:

电话选项复选框

实体:

public class PhoneOption
{
    public bool IsOptionSelected { get; set; } = false;
    public int OptionId { get; set; }
    public string OptionName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

模型:

[Display(Name = "Phone Options")]
public IEnumerable<PhoneOption> PhoneOptions { get; set; }

. . . .
PhoneOptions = repository.GetPhoneOptions();
Run Code Online (Sandbox Code Playgroud)

库:

public IEnumerable<PhoneOption> GetPhoneOptions()
{
    IEnumerable<PhoneOption> options = new[]
    {
        new PhoneOption { OptionId = 1, OptionName = "Phone Case",       IsOptionSelected …
Run Code Online (Sandbox Code Playgroud)

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

9
推荐指数
1
解决办法
9846
查看次数

如何在TagHelper.Process中获取元素(定义为TagHelper)内容?

如何将元素定义为TagHelper内容?

例如,元素定义为:

<markdown>bla bla</markdown>
Run Code Online (Sandbox Code Playgroud)

和助手定义为:

[HtmlTargetElement("markdown")]
public class MarkdownTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        var c = output.Content.GetContent(); 
        // c is empty; how to get content "bla bla"?
    }
}
Run Code Online (Sandbox Code Playgroud)

asp.net-core-mvc tag-helpers

9
推荐指数
1
解决办法
1325
查看次数

从ViewBag中选择TagHelper使用List

我目前正在尝试在asp.net 5中使用taghelpers.我想使用带有ViewBag列表的select标签帮助器.我放入asp-for字段的任何内容都会给我一个错误,因为它试图从IEnumerable而不是视图包中取出它.

我想替换这个:

@model IEnumerable<InvoiceIT.Models.Invoice>
@using (Html.BeginForm())
{
    <p>            
        @Html.DropDownList("Companies", String.Empty)       
        <input type="submit" value="Filter" class="btn btn-default" />
    </p>
}
Run Code Online (Sandbox Code Playgroud)

有了这个:

@model IEnumerable<InvoiceIT.Models.Invoice>
<form asp-controller="Invoice" asp-action="Index" method="post" class="form-horizontal" role="form">
    <select asp-for="????" asp-items="ViewBag.Companies" class="form-control">
    </select>
    <input type="submit" value="Save" class="btn btn-default" />
</form>
Run Code Online (Sandbox Code Playgroud)

以下是我如何填充控制器中的选择列表:

ViewBag.Companies = new SelectList(await DbContext.Company.ToListAsync(), "CompanyID", "Name");
Run Code Online (Sandbox Code Playgroud)

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

8
推荐指数
1
解决办法
7666
查看次数

如何从ASP.NET Core中的Razor View获取Url中的id值

我有一个简单的ASP.NET Core Web应用程序,其中包含这样的页面http://localhost:5050/Posts/Create/3.

在我的Razor View中Views/Posts/Create.cshtml,我如何能够获得值"3"以便我可以创建类似的链接<a href="/Blogs/Details/3">« Back to Blog</a>

到目前为止,使用以下Tag Helper创建了链接,但我不知道要放什么asp-route-id:

<a asp-controller="Blogs" asp-action="Details" asp-route-id="" class="btn btn-default btn pull-right">&laquo; Back</a>
Run Code Online (Sandbox Code Playgroud)

我只是使用默认的mvc路由:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)

我知道我可以从模型(即,得到它Model.Blog.BlogId),但我希望从URL得到它使用类似Request.Query["id"]Views/Post/Create.cshtml.

我试过了asp-route-id="@Context.Request.Query["id"].

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

8
推荐指数
4
解决办法
1万
查看次数

用于ASPNET CORE的TagHelper ViewComponent无法正常工作

我正在处理ASPNET CORE [版本1.1,使用VS2017社区,版本15.1(26403.3)]我创建了一个工作的ViewComponent UserDetails(缩写如下):

namespace AdminConsole.ViewComponents
{
[ViewComponent(Name = "UserDetails")]
public class UserDetailsViewComponent : ViewComponent
{ ...does stuff... }
Run Code Online (Sandbox Code Playgroud)

我可以通过使用在视图中成功调用它

@await Component.InvokeAsync("UserDetails")
Run Code Online (Sandbox Code Playgroud)

我宁愿通过使用TagHelper调用它,但它只是没有发生.我已经浏览了SO和其他有用的页面,而其他人似乎让它工作,我不能.

@addTagHelper "*, AdminConsole"在_ViewImports.cshtml中添加了一行,<vc:user-details></vc:user-details>在视图中我想要渲染VC,它不会渲染; 我没有得到错误,它只是没有渲染.

如果我将TagHelper声明更改为@addTagHelper *, AdminConsole(没有语音标记),它也不会呈现或出错.

如果我尝试上述两种组合并尝试<vc:UserDetails></vc:UserDetails>没有烤肉串的情况下,它不会渲染或错误.

我的_ViewImports.cshtml情况如下

@using AdminConsole
@using AdminConsole.Models
@using AdminConsole.Models.AccountViewModels
@using AdminConsole.Models.ManageViewModels
@using Microsoft.AspNetCore.Identity
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@inject Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration TelemetryConfiguration
@addTagHelper "*, AdminConsole"
Run Code Online (Sandbox Code Playgroud)

@addTagHelperdeclaration(AdminConsole.ViewComponents)中使用VC的完整命名空间会产生cannot resolve TagHelper错误.

我想我已经尝试了所有的排列,来自官方和社区来源的文档只是建议我尝试过(并且有所不同!).如果有人能帮助我解释一下,我将非常感激.

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

8
推荐指数
1
解决办法
1052
查看次数