2013-05-20 3 views
5

Wie mache ich Links in einem neuen Fenster mit Razor und DisplayFor?Razor Ansicht zu DisplayFor DataType.Url die in einem neuen Fenster öffnet

Ich habe eine Eigenschaft, die DataType.Url ist,

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

Mit @Html.DisplayFor diese in einen a Tag umgewandelt werden.

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

Allerdings brauche ich es in einem neuen Fenster zu öffnen. new {target="_blank"} Einstellung nicht fügen Sie das Attribut für das Ziel

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

Es ist nur diese eine Seite, wo ich die Funktionalität der Öffnung in einem neuen Fenster muß so mit JavaScript ein bisschen übertrieben scheint.

Wie bekomme ich die Links in einem neuen Fenster zu öffnen?

+0

Versuchen Sie, @ bevor Ziel, mit Klasse, die Sie @, bevor er hinzufügen müssen, da seine Schlüsselwort –

+0

'DisplayFor' rendert ein 'span'-Tag, Sie brauchen dafür ein' a'-Tag. – mattytommo

+0

@mattytommo, in ASP.NET MVC 4 gibt es eine Standardvorlage für das, die einen Anker rendert. –

Antwort

12

Sie können die Standardvorlage außer Kraft setzen, indem eine Datei in ~/Views/Shared/DisplayTemplates/Url.cshtml mit folgendem Inhalt hinzufügen:

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

Dies würde bedeuten, dass alle Links in einem neuen Fenster geöffnet würden. Gibt es eine Möglichkeit, das Template ** nur ** auf das fragliche Viewmodel anzuwenden? –

+6

Ja, Sie könnten Ihre Vorlage zum Beispiel '~/Views/Shared/DisplayTemplates/NewWindowUrl.cshtml' nennen und dann Ihre View-Model-Eigenschaft mit dem' UIHint'-Attribut dekorieren: '[UIHint (" NewWindowUrl "), DataType (DataType. Url)] öffentliche Zeichenkette SiteUrl {get; einstellen; } '. Jetzt zeigen nur Modelleigenschaften, die mit diesem UIHint-Attribut versehen sind, die benutzerdefinierte Vorlage und andere die Standardvorlage. –

Verwandte Themen