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
шаблон редактора.