2015-09-12 3 views
2

У меня есть простая модель представленияHtml.DisplayNameFor DataType.Url

public string LinkName { get; set; } 

[Display(Name = "Url")] 
[DataType(DataType.Url)] 
public string Link 
{ 
    get 
    { 
    return string.Format(/*some link building logic*/); 
    } 
} 

Но когда я пытаюсь отобразить ее в представлении с

@Html.DisplayFor(m => m.Link) 

я получаю весь Url отображается и я хотел просто показать LINKNAME т.е. что-то вроде этого

<a href="http://...">http://...</a> 

, но я бы хотел, чтобы это так:

<a href="http://...">LinkName</a> 
+0

Вы имеете в виду '@ Html.DisplayFor (m => mL inkName) '? Какова ценность 'Link' и' LinkName'? –

ответ

2

MVC не может вытащить значение из другого имущества при использовании DisplayFor, так что у вас есть 2 варианта. Сначала вы можете построить его вручную:

<a href="@Model.Url">@Model.LinkName</a> 

Следующим вариантом будет создание собственного класса и настраиваемого шаблона отображения. Например:

public class NamedUrl 
{ 
    public string Name { get; set; } 
    public string Url { get; set; } 
} 

Ваша новая модель:

public class YourModel 
{ 
    public NamedUrl MyUrl { get; set; } 
} 

Шаблон отображения (поставить его в Views/Shared/DisplayTemplates/NamedUrl.cshtml):

@model YourAssembly.NamedUrl 
<a href="@Model.Url">@Model.LinkName</a> 

А теперь по вашему мнению, вы можете использовать:

@Html.DisplayFor(m => m.MyUrl) 
+0

А как насчет @ html.ActionLinks? не будет ли это еще лучше? – Icen

+1

ActionLink подразумевает, что у вас есть имя действия, а не полный URL-адрес. – DavidG