我的 MVC4 View 中有一个三元运算符:
@(modelrecord.Website == null ? "": modelrecord.Website.Replace("http://","") )
这行得通,但我想让网站记录一个超链接。这可能吗?
注意:我正在替换“http://”前缀,因为它很难看。
如果我用 Html.Raw 放入实际字符串,尖括号被转义,我仍然没有得到链接。
最佳答案
您可能应该使用 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、电子邮件等内容并根据需要格式化它们。
如果你想自定义所有的Urls,你可以创建一个display template为此:
~/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
(如 EditorTemplates
)是 MVC 使用的基于约定的路径。因此,您可以将模板放在 Shared
目录中以在整个站点范围内应用此更改,或者您可以将文件夹放在其中一个 Controller 文件夹中以仅将其应用于该 Controller (例如~/Views/Home/Displaytemplates/Url.cshtml
)。此外,Url
是与 DisplayType
一起使用的预定义模板之一,还有以下内容:
- 网址
- 电子邮件地址
- 隐藏输入
- HTML
- 正文
关于ASP.NET Razor - 我可以在三元运算符中放置一个链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973989/