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)
我有一个简单的视图模型
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)