@Html.LabelFor,带有<;a>;在里面贴标签

@Html.LabelFor,带有<;a>;在里面贴标签,html,asp.net,asp.net-mvc,razor,Html,Asp.net,Asp.net Mvc,Razor,这应该是一个相当简单的问题,我只想在razor视图中使用@Html.LabelFor。我的一个标签是不同的,它有一个 输出什么内容: <label for="question"><a href=\"mailto:support@testdomain.com">support@testdomain.com</a></label> &lt;label for="question"&gt;&lt;a href=\"mailto

这应该是一个相当简单的问题,我只想在razor视图中使用@Html.LabelFor。我的一个标签是不同的,它有一个 输出什么内容:

<label for="question"><a href=\"mailto:support@testdomain.com">support@testdomain.com</a></label>
&lt;label for="question"&gt;&lt;a href=\"mailto:support@testdomain.com"&gt;support@testdomain.com&lt;/a&gt;</label>
label for=“question”a href=\”邮件收件人:support@testdomain.com"support@testdomain.com/a
(my<已替换为不带空格的<;,因此代码显示在页面上,而不是作为链接呈现)

我如何使它输出它应该输出的内容


注意,model.Question设置为

为什么您希望标签包含完整的HTML?我认为存储电子邮件地址是一种更好的方法,在您看来,您可以:

 <a href="mailto:@Model.Email">@Model.Email</a>
鉴于:

@Html.LabelFor(model => model.EmailAddress): 
@Html.DisplayFor(model => model.EmailAddress)

<!-- OR (no label element just the label text)-->

@Html.DisplayNameFor(model => model.EmailAddress): 
@Html.DisplayFor(model => model.EmailAddress)

@Html.LabelFor(model=>model.EmailAddress):
在运行时,将:


发送电子邮件:

您正在与Razor系统对抗,因为它默认编码。这就是使用剃须刀的妙处。许多标记类,包括
Label
,最终将通过调用
TagBuilderExtensions.ToMvcHtmlString

internal static class TagBuilderExtensions
  {
    internal static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode)
    {
      return new MvcHtmlString(tagBuilder.ToString(renderMode));
    }
  }
表示不应再次编码的HTML编码字符串。因此,您无法通过
LabelFor
完成您想做的事情。事实上,Razor明确地保证了你不能

但既然你的malto:不是一个真正的标签,你可以:

@Html.Raw(Server.HtmlDecode(Model.MyField)

我尝试过使用html.labelfor的不同重载,包括自己传递字符串。这也得到了编码。我甚至试过html.raw。它也是经过编码的。您是如何使用Html.Raw的?提示:它将被编码到数据库中。似乎没有意义。
元素是可访问性控件-当您单击它时,焦点将设置为关联的控件。你想打开电子邮件编辑器,所以它不应该是一个标签。以前的回答和我一样,大多数人问为什么
。在这种情况下,
。另见此。尽管我不希望在我的
中有链接,特别是当我将
for
属性与输入字段一起使用时。--忽略此注释-这是正确的方法。通过使用包含html字符串甚至特性的标签,您正在为自己制造问题。标签应该用于显示属性的名称(或非常简短的描述),请参阅更新的答案。。。
[Display(Name = "Send Email")]
public string EmailAddress { get; set; }
@Html.LabelFor(model => model.EmailAddress): <a href="mailto:@Model.EmailAddress">@Model.Email</a>
internal static class TagBuilderExtensions
  {
    internal static MvcHtmlString ToMvcHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode)
    {
      return new MvcHtmlString(tagBuilder.ToString(renderMode));
    }
  }
@Html.Raw(Server.HtmlDecode(Model.MyField)