ASP.NET Razor - 我可以在三元运算符中放置链接吗?

时间:2013-04-12 14:28:11

标签: asp.net html razor

我的MVC4视图中有一个三元运算符:

@(modelrecord.Website == null ? "" : modelrecord.Website.Replace("http://","") )

这有效,但我想让网站记录一个超链接。这可能吗?

注意:我正在替换“http://”前缀,因为它很难看。

如果我使用Html.Raw输入实际字符串,则尖括号会被转义,但我仍然没有链接。

1 个答案:

答案 0 :(得分:3)

您应该使用DataAnnotations@Html.DispayFor帮助程序。

public class ModelRecord
{
    [DataType(DataType.EmailAddress)]
    public String EmailAddress { get; set; }

    [DataType(DataType.Url)]
    public String Website { get; set; }
}

然后:

email me at @Html.DisplayFor(x => x.EmailAddress)
or visit me online at @Html.DisplayFor(x => x.Website)

DataTypeAttribute处理网址,电子邮件等内容,并根据它们进行格式化。

如果您要自定义所有网址,可以为其创建display template

<强>〜/查看/共享/ DisplayTemplates / Url.cshtml

@model String
@if (!String.IsNullOrEmpty(Model))
{
    <a href="@Model">@Model.Replace("http://", "")</a>
}
else
{
    @:Default text when url is empty.
}

DisplayTemplates(如EditorTemplates)是MVC使用的基于约定的路径。因此,您可以将模板放在Shared目录中以在站点范围内应用此更改,或者您可以将文件夹放在其中一个控制器文件夹中,只将其应用于该控制器(例如{{1 }})。此外,~/Views/Home/Displaytemplates/Url.cshtml是包含在Url中使用的预定义模板之一,以及以下内容:

  • 地址
  • EmailAddress的
  • HiddenInput
  • HTML
  • 文本