У меня есть GroupPageViewModel, у которого есть public string GroupName { get; }, и модель ввода для метода службы EditGroupInputModel, у которого также есть public string GroupName { get; set; }.

В представлении для страницы я хотел бы отобразить редактор для Group а-ля Html.Partial("~/Views/Group/_EditGroup.cshtml", ???) или с помощью EditorFor.

Я хотел бы, чтобы model для _EditGroup.cshtml был EditGroupInputModel, но он должен знать GroupName из свойства GroupName родительского представления.

Я понимаю, что могу использовать Html.Partial("~/Views/Group/_EditGroup.cshtml", new EditGroupInputModel() { GroupName = Model.GroupName}), но мне кажется, что это каким-то образом отклоняется от цели MVC-фреймворка (или я просто не видел такого примера).

Это лучший способ передать такой параметр в модель частичного представления или есть лучший подход с фреймворком MVC?

0
tacos_tacos_tacos 4 Фев 2014 в 14:26
Не могли бы вы создать свойство ParentGroupName в EditGroupInputModel? Затем вы просто передаете модель в свое частичное представление: Html.Partial ("~ / Views / Group / _EditGroup.cshtml", model.EditGroupInputModel)
 – 
markpsmith
4 Фев 2014 в 14:40
@markpsmith, не факт, что у каждого GroupPageViewModel должен быть EditGroupInputModel (редактирование - это лишь одно из многих действий, которые вы можете выполнить)
 – 
tacos_tacos_tacos
4 Фев 2014 в 14:42
А, ладно, думаю, я неправильно понял
 – 
markpsmith
4 Фев 2014 в 14:44
При построении классов модели Используйте свойства {get;set;} модели представления EditGroupInputModel.GroupName. В наборе вы можете сделать this.GroupName = base.GroupName примерно так. Я не уверен в синтаксисе, но я знаю, что вам нужно поиграть с {get; set}
 – 
Rajshekar Reddy
4 Фев 2014 в 17:02

1 ответ

Лучший ответ

Имхо, в этом нет ничего плохого

Html.Partial("~/Views/Group/_EditGroup.cshtml", new EditGroupInputModel() { GroupName = Model.GroupName}) 

Я обычно передаю модель родительского представления в конструктор, поэтому дочерняя модель решает, что ей нужно:

Посмотреть:

Html.Partial("~/Views/Group/_EditGroup.cshtml", new EditGroupInputModel(Model))

EditGroupInputModel.cs:

EditGroupInputModel(GroupPageViewModel parentModel) 
{ 
    GroupName = parentModel.GroupName;
}
1
polybios 4 Фев 2014 в 17:10