При попытке получить 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 и типа при использовании помощника?