EditorForModel и DisplayForModel не работают с объектами Expando - PullRequest
0 голосов
/ 29 марта 2012

Или, по крайней мере, они не делают то, что я ожидал.Мой метод Action выглядит следующим образом:

    Function Test() As ActionResult
        Dim model As Object = New ExpandoObject()
        model.FieldA = 123
        model.FieldB = "This is a string"
        model.FieldC = DateTime.Now

        Return View(model)
    End Function

, а представление выглядит так:

@ModelType Object
@Html.DisplayForModel

Я ожидал, что он выдаст то же самое, что вы получите, если модельреальный объект с этими полями, но вместо этого я получаю это:

[FieldA, 123][FieldB, This is a string][FieldC, 3/29/2012 12:10:24 PM] 

EditorForModel делает то же самое.Это правильное поведение, и как лучше всего реализовать поведение, которое я ищу?

1 Ответ

0 голосов
/ 29 марта 2012

Да, это правильное поведение.Поставщик метаданных по умолчанию (DataAnnotationsModelMetadataProvider) использует отражение для получения информации о модели, и именно поэтому вы получаете этот результат.

Я бы предложил создать настраиваемый поставщик метаданных, который будет правильно работать с динамикой.Попробуйте унаследовать от этого класса - http://msdn.microsoft.com/en-us/library/system.web.mvc.dataannotationsmodelmetadataprovider.aspx.

...