【问题标题】:Conditionally display a title as link in MVC razor有条件地将标题显示为 MVC razor 中的链接
【发布时间】:2018-04-09 14:45:28
【问题描述】:

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

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

【问题讨论】:

  • @length 总是得到相同的值,并且它不为空。
  • 如果将int? length = @Html.DisplayFor(modelItem =&gt; item.Link).ToString()?.Length; 替换为int? length = item?.Link?.Length;究竟会发生什么?
  • 现在它可以工作了,@length 值发生了变化,并且所需的标题没有获得链接格式。

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


【解决方案1】:

你让事情变得复杂了。

您可以简单地检查它是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>
}

希望对您有所帮助!

【讨论】:

  • PaginatedList' 不包含“Link”的定义,并且找不到接受“PaginatedList”类型的第一个参数的扩展方法“Link”(您是否缺少使用指令还是程序集引用?
  • 你需要使用@item而不是@Model,其实我理解错了,看更新后的帖子
【解决方案2】:

变化:

int? length = @Html.DisplayFor(modelItem => item.Link).ToString()?.Length;

到:

int? length = item?.Link?.Length;

这将为您提供 Link 的长度 - 而不是生成的 HTML。

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多