Помощник Html.Editor () в ASP.NET MVC 3 не работает должным образом с массивом в модели - PullRequest
0 голосов
/ 30 марта 2012

В моем приложении ASP.NET MVC 3 у меня есть классы, подобные следующим:

public class Localization<T>
{
    public int VersionID { get; set; }
    public T Value { get; set; }
    ...
}

public class Localizable<T>
{
    public Localization<T>[] Name { get; set; }
    ...
}

Затем у меня есть следующее представление:

@model dynamic
...
@for (int i = 0; i < VersionCount; i++)
{
    ...
    @Html.Editor(string.Format("Name[{0}].Value", i))
    ...
}

Теперь, когда я отображаю этоview, передавая подкласс Localizable<string> в качестве модели, текстовые поля для строк отображаются, но они пусты.Если я заменю @Html.Editor(string.Format("Name[{0}].Value", i)) на @InputExtensions.TextBox(Html, string.Format("Name[{0}].Value", i), Model.Name[i].Value), текстовые поля будут правильно заполнены значениями из модели.Однако использование TextBox вместо Editor не подходит для меня, потому что я хочу использовать разные шаблоны редактора для разных типов T. Итак, что я делаю не так, или это ошибка в MVC, и есть ли обходной путь?

1 Ответ

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

вы можете использовать атрибут UIHint ("MyUIHintName").

public class Localizable<T>
{
    [UIHint("MyUIHintName")]
    public Localization<T>[] Name { get; set; }
    ...
}

Тогда вам нужно создать папку Views / Shared / EditorTemplates /. Далее вам нужно создать Razor View Views / Shared / EditorTemplates / MyUIHintName.cshtml В этом представлении вы можете написать логику для каждого типа, например:

@model dynamic

@if(ViewData.ModelMetadata.ModelType.Name=="string")
{
    //Do something
}
@if(ViewData.ModelMetadata.ModelType.Name=="int")
{
    //Do something
}
...