Я начинающий веб-разработчик ASP.NET MVC 3, и у меня возникла эта проблема:
Существует несколько моделей представлений, которые имеют схожую логику, и я пришел к мысли, что у них будет один общий шаблон EditorTemplate, который будет отображаться Html.EditorFor
.
Шаблон называется "ExistOrCreateNewInput.cshtml
" и строго типизирован с IExistOrCreateNewInput
класс интерфейса:
public interface IExistOrCreateNewInput
{
int? existEntId { get; set; }
IUnapprovedNewEntityCreateInput createInput { get; set; }
}
Содержимое шаблона выглядит примерно так:
@model IExistOrCreateNewInput
<h2>Add or choose</h2>
@* here put some common js code *@
Html.EditorFor(o => o.existEntId)
Html.EditorFor(o => o.createInput)
Предположим, у меня есть какие-то модели, которые реализуют этот интерфейс, например:
public class FirstModelInput : IExistOrCreateNewInput
{
[Display(Name="First")]
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("PaperCreateInput")]
public PaperCreateInput paperCreateInput {get; set;}
public IUnapprovedNewEntityCreateInput createInput
{
get
{
return paperCreateInput;
}
set { }
}
}
public class SecondModelInput : IExistOrCreateNewInput
{
[Display(Name="Second")]
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("ThesisCreateInput")]
public ThesisCreateInput thesisCreateInput {get; set;}
public IUnapprovedNewEntityCreateInput createInput
{
get
{
return thesisCreateInput;
}
set { }
}
}
public class ThirdModelInput : IExistOrCreateNewInput
{
...
}
Где классы PaperCreateInput
и ThesisCreateInput
реализуют интерфейс IUnapprovedNewEntityCreateInput
.
Итак, я хочу, чтобы мой вид модели
public class SomeGlobalViewModel
{
[Required]
string name {get; set;}
[UIHint("ExistOrCreateNewInput")]
FirstModelInput firstModel {get; set;}
}
для правильной визуализации атрибута "firstModel" методом Html.EditorFor(o => o.firstModel)
.
Теперь я знаю, что метод EditorFor работает с метаданными, поэтому, вероятно, мой вопрос должен выглядеть так: « как передать метаданные атрибутов в атрибуты базового интерфейса ». Поправь меня, если я ошибаюсь.
В любом случае, мне нужны эти вспомогательные методы
Html.EditorFor(o => o.existEntId)
Html.EditorFor(o => o.createInput)
в шаблоне моего редактора (строго типизированный с интерфейсом) для отображения атрибутов моих Моделей, как я их объявил в реализующих классах:
[UIHint("Lookup")]
public int? existEntId {get; set;}
[UIHint("PaperCreateInput")]
public PaperCreateInput createInput {get; set;}
Заранее спасибо.
Извините за мой плохой английский.