由于我是MVC Razor的新手,我找不到实现我想做的有效方法: 我的目的是在一个chtml视图中显示两列,一列用于标题,另一列用于链接,标题必须在链接时才显示为链接。
我试过了:
@model PaginatedList<MyProject.Models.Todo>
@foreach (var item in Model) {
<tr>
<td>
@{
int? length = @Html.DisplayFor(modelItem => item.Link).ToString()?.Length;
}
@if (length is null)
{
@Html.DisplayFor(modelItem => item.Title)
}
else
{
<a href="@Html.DisplayFor(modelItem => item.Link)" target=_blank>
@Html.DisplayFor(modelItem => item.Title)
</a>
}
</td>
<td>
<a href=@Html.DisplayFor(modelItem => item.Link) target="_blank">@Html.DisplayFor(modelItem => item.Link)</a>
</td>
</tr>
使用上面的代码,我将标题显示为链接,尽管其对应的链接字段为空。如何纠正?
答案 0 :(得分:2)
你让它变得复杂。
您只需检查它是null
还是只是一个空字符串,然后只使用标题,另外明智地创建文本的超链接。
并且您不需要使用辅助方法在另一个html中生成html,就像您正在为锚链接做的那样,只需使用Model
属性来呈现href
和内部文本的值锚元素。
@if (String.IsNullOrEmpty(item.Link))
{
@Html.DisplayFor(modelItem => item.Title)
}
else
{
<a href ="@item.Link" target=_blank>@item.Title</a>
}
希望有所帮助!
答案 1 :(得分:1)
变化:
int? length = @Html.DisplayFor(modelItem => item.Link).ToString()?.Length;
为:
int? length = item?.Link?.Length;
这将获得Link
的长度 - 而不是生成的HTML。