UIHint не использует EditorTemplate

У меня есть такая модель:

public class MyModel {
    [ScaffoldColumn(false)]
    public int CharityId { get; set; }

    [UIHint("Charities")]
    public SelectList Charities { get; set; }
}

Затем у меня есть EditorTemplate под названием Charities.cshtml:

@model MyModel

@Html.DropDownListFor(model => model.CharityId, Model.Charities)

Тогда на моей странице:

@model MyModel

@Html.EditorForModel()

Однако, несмотря ни на что, он не отображает шаблон Charities. Я ломал голову над этим, и это должно сработать... но это не так.

Есть идеи?

РЕДАКТИРОВАТЬ:

Проблема заключается в том, что шаблон объекта по умолчанию не будет отображать сложный объект, кроме самого себя (так называемое поверхностное погружение), даже если существует UIHint. У меня сложилось впечатление, что UIHint заставит его визуализировать шаблон, но я был явно неправ.

Исправление состоит в том, чтобы не пытаться позволить модели визуализировать себя. Это грустно.

1 ответ

Решение

Перво-наперво @EditoFormodel() на вашей странице выглядит странно. Я думаю, вы имели в виду что-то еще.

Теперь к делу: вы украсили Charities собственность с UIHint, Это свойство имеет тип SelectList, Это означает, что Charities.cshtml шаблон должен быть строго напечатан на SelectListне MyModel как ты. Вы можете просто удалить этот атрибут UIHint и иметь следующую модель представления:

public class MyModel {
    [ScaffoldColumn(false)]
    public int CharityId { get; set; }

    public SelectList Charities { get; set; }
}

и по вашему мнению:

@model MyModel
@Html.EditorForModel()

а затем внутри ~/Views/Shared/EditorTemplates/MyModel.cshtml иметь:

@model MyModel
@Html.DropDownListFor(model => model.CharityId, Model.Charities)

Это стандартные соглашения. Если вы хотите, чтобы ваш редактор вызывался Charities.cshtml Вы можете сделать это на своей странице:

@model MyModel
@Html.EditorForModel("Charities")

Но обычно у вас будет следующая модель:

public class FooViewModel
{
    [UIHint("Charities")]
    public MyModel Charities { get; set; }
}

Теперь, если ваш основной вид строго набран FooViewModel вы можете:

@model FooViewModel
@Html.EditorFor(x => x.Charities)

который сделает Charities.cshtml шаблон редактора.

Другие вопросы по тегам