3

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

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

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

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

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

4

1 回答 1

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处理诸如 url、电子邮件等之类的东西,并根据它们进行格式化。

如果要自定义所有 Url,可以为其创建显示模板

~/Views/Shared/DisplayTemplates/Url.cshtml

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

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

  • 网址
  • 电子邮件地址
  • 隐藏输入
  • html
  • 文本
于 2013-04-12T14:31:33.123 回答