Html.DisplayNameFor DataType.Url

Html.DisplayNameFor DataType.Url

我有一个简单的视图模型

public string LinkName { get; set; }

[Display(Name = "Url")]
[DataType(DataType.Url)]
public string Link
{
  get
  {
     return string.Format(/*some link building logic*/);
  }
}

但是当我尝试用

显示它时
@Html.DisplayFor(m => m.Link)

我正在显示整个 Url,我只想显示 LinkName,例如这样的东西

<a href="http://...">http://...</a>

但我想要这样:

<a href="http://...">LinkName</a>

当您使用 DisplayFor 时,MVC 无法从另一个 属性 中获取值,因此您有两个选择。首先你可以手动构建它:

<a href="@Model.Url">@Model.LinkName</a>

下一个选项是制作您自己的 class 和自定义显示模板。例如:

public class NamedUrl
{
    public string Name { get; set; }
    public string Url { get; set; }
}

您的新模型:

public class YourModel
{
    public NamedUrl MyUrl { get; set; }
}

显示模板(放在Views/Shared/DisplayTemplates/NamedUrl.cshtml):

@model YourAssembly.NamedUrl
<a href="@Model.Url">@Model.LinkName</a>

现在在您看来您可以使用:

@Html.DisplayFor(m => m.MyUrl)