【问题标题】:Razor view to DisplayFor DataType.Url that opens in new window在新窗口中打开的 DisplayFor DataType.Url 的 Razor 视图
【发布时间】:2013-05-20 11:06:15
【问题描述】:

如何使用 Razor 和 DisplayFor 在新窗口中打开链接?

我有一个属性是DataType.Url

[DataType(DataType.Url)]
public string SiteUrl { get; set; }

使用@Html.DisplayFor 将其转换为a 标记。

@Html.DisplayFor(model => item.SiteUrl)

但是我需要它在新窗口中打开。设置new {target="_blank"}不会为target添加属性

@Html.DisplayFor(model => item.SiteUrl, new {target="_blank" })

正是这一页,我需要在新窗口中打开的功能,所以使用 JavaScript 似乎有点过分了。

如何让链接在新窗口中打开?

【问题讨论】:

  • 尝试在目标之前添加@,类你需要在它之前添加@,因为它是一个关键字
  • DisplayFor 呈现一个span 标签,你需要一个a 标签。
  • @mattytommo,在 ASP.NET MVC 4 中有一个用于呈现锚点的默认模板。
  • @DarinDimitrov 真的吗?对于DisplayFor?你有链接吗?我有兴趣。

标签: asp.net-mvc razor


【解决方案1】:

您可以通过在~/Views/Shared/DisplayTemplates/Url.cshtml 中添加一个包含以下内容的文件来覆盖默认模板:

<a href="@ViewData.Model" target="_blank">@ViewData.TemplateInfo.FormattedModelValue</a>

【讨论】:

  • 这意味着所有链接都将在新窗口中打开。有没有办法让模板应用于相关视图模型?
  • 是的,您可以将您的模板命名为例如~/Views/Shared/DisplayTemplates/NewWindowUrl.cshtml,然后使用UIHint 属性装饰您的视图模型属性:[UIHint("NewWindowUrl"), DataType(DataType.Url)] public string SiteUrl { get; set; }。现在只有用这个 UIHint 属性装饰的视图模型属性将使用自定义模板,其他的将使用默认模板。
猜你喜欢
  • 1970-01-01
  • 2022-12-24
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2014-03-24
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多