Html.DisplayNameFor DataType.Url

时间:2015-09-12 07:39:11

标签: asp.net-mvc razor displayfor

我有一个简单的视图模型

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)

我正在显示整个网址,我只想显示LinkName,就像这样

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

但我想这样:

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

1 个答案:

答案 0 :(得分:2)

当您使用DisplayFor时,MVC无法从其他属性中提取值,因此您有2个选项。首先,您可以手动构建它:

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

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

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)