我的MVC4视图中有一个三元运算符:
@(modelrecord.Website == null ? "" : modelrecord.Website.Replace("http://","") )
这有效,但我想让网站记录一个超链接。这可能吗?
注意:我正在替换“http://”前缀,因为它很难看。
如果我使用Html.Raw输入实际字符串,则尖括号会被转义,但我仍然没有链接。
答案 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
中使用的预定义模板之一,以及以下内容: