有条件地将标题显示为MVC剃刀中的链接

时间:2017-10-27 22:54:09

标签: c# html asp.net-mvc razor

由于我是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>

使用上面的代码,我将标题显示为链接,尽管其对应的链接字段为空。如何纠正?

2 个答案:

答案 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。