UIHint не использует EditorTemplate - PullRequest
2 голосов
/ 29 августа 2011

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

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

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

Затем у меня есть шаблон Editor с именем Charities.cshtml:

@model MyModel

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

Затем на моей странице:

@model MyModel

@Html.EditorForModel()

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

Есть идеи?

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

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

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

1 Ответ

5 голосов
/ 29 августа 2011

Перво-наперво @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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...