2015-10-02 2 views
1

При попытке получить DisplayFor (enum), чтобы показать DisplayName Enum вместо текста Enum, я наткнулся на этот вопрос, который указал мне в правильном направлении:VB ASP.NET DisplayFor Enum не отображается правильно, используя помощник DisplayFor

MVC 5.1 Razor DisplayFor not working with Enum DisplayName

Используя это, я создал помощник, чтобы отображать DisplayName.

Модель:

Public Enum QnStatus 
    <Display(Name:="Öppen")> Open 
    <Display(Name:="Avslutad")> Closed 
    <Display(Name:="Väntar på svar från kund")> WaitingOnCustomer 
    <Display(Name:="Väntar på svar från leverantör")> WaitingOnSupplier 
End Enum 

Helper:

@Model Enum 
@If EnumHelper.IsValidForEnumHelper(ViewData.ModelMetadata) Then 
Dim displayname As String = "" 
For Each item As SelectListItem In EnumHelper.GetSelectList(ViewData.ModelMetadata, DirectCast(Model, [Enum])) 
    If item.Selected Then 
     If Not IsNothing(item.Text) Then 
      displayname = item.Text 
     Else 
      displayname = item.Value 

     End If 
    End If 
Next 

If String.IsNullOrEmpty(displayname) Then 
    If Model Is Nothing Then 
     displayname = String.Empty 
    Else 
     displayname = Model.ToString() 
    End If 

End If 

@Html.DisplayFor(Function(model) displayname) 

Else 
    @Html.DisplayTextFor(Function(model) model) 
End If 

Проблема, которую я имею, что теперь при использовании Displayfor в представлении она возвращает следующее (пример для WaitingOnCustomer):

 
WaitingOnCustomer Enum Väntar på svar från kund 

Итак, я получаю Enum Text + Enum Type + DisplayName.

без использования помощника я получаю:

 
WaitingOnCustomer 

Почему это возвращение текста Enum и типа при использовании помощника?

ответ

0

В настоящее время ваш помощник возвращает значение @Model + the literal text "Enum" + DisplayName. Чтобы исправить это, удалите первую строку, @Model Enum, со стороны помощника, а затем она вернет только DisplayName.

Смежные вопросы