我有一个三元运营商在我MVC4查看:ASP.NET Razor - 我可以在三元运算符中放置一个链接吗?
@(modelrecord.Website == null ? "" : modelrecord.Website.Replace("http://",""))
这工作,但我想使网站记录的超链接。这可能吗?
注意:我替换了“http://”前缀,因为它很丑。
如果我用Html.Raw放入实际字符串,尖括号会被转义,但我仍然没有链接。
我有一个三元运营商在我MVC4查看:ASP.NET Razor - 我可以在三元运算符中放置一个链接吗?
@(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
处理之类的网址,电子邮件等,他们根据格式。
如果您想自定义所有的网址,你可以创建一个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
目录中,以便在整个站点范围内应用此更改,也可以将该文件夹放在其中一个控制器文件夹中,以使其仅适用于该控制器(例如~/Views/Home/Displaytemplates/Url.cshtml
)。另外,Url
是预先定义的模板之一包括了使用与DisplayType
,具有以下沿着:
优秀。非常感谢你。我不得不使用@ Html.DisplayFor(x => modelrecord.Website),但是 - 这个答案解释了它:http://stackoverflow.com/questions/10097995/i-want-to-understand-the-lambda-expression -in-html-displayformodelitem-mymo – northben
@northben:确实。我不知道虚拟机的结构,但是展示了如何以最简单的方式格式化值。与你的情况一样,你必须从模型的嵌套对象中引用一个属性(你会看到如何),但前提和装饰是相同的。 –
你确定'x => x.Website'可以用于任何模型吗?我显然是新手,但似乎第一个x'覆盖'这个'无参数'lambda的第二个。 – northben