2014-11-08 4 views
0

У меня есть два контроллера в моем проекте MVC, каждый из которых имеет действие/вид Weapon. Оба представления имеют свой набор свойств @model: WeaponViewModel с различными свойствами в зависимости от вида, например. для одного вида, ViewModel.Weapon = Axe и для другого вида ViewModel.Weapon = Sword. Axe и Sword реализуют интерфейс IWeapon, поэтому имеют одинаковые свойства.Частичные представления ASP.NET MVC для идентичных видов

Поскольку каждый вид делает то же самое WeaponViewModel, я нахожу его излишним, чтобы иметь идентичный код Razor для двух видов. То, что я сделал, чтобы создать представление с именем _Weapon в папке Shared как таковой:

@model WeaponViewModel 
//razor code goes here 

..и в двух взглядов, которые я теперь только этот код:

@model WeaponViewModel 
@{ Html.RenderPartial("_Weapon", Model); } 

В результате работы, но мой Вопрос: правильно ли использовать Html.RenderPartial для визуализации (по существу) полного представления? Кроме того, если позже я решил стать более подробным и создать дополнительные частичные представления в моем общем _Weapon представлении, есть ли какие-либо искажения, которые нужно искать?

+1

Вы можете также использовать EditorFor (м => м) с частичным в соображениях/Shared/EditorTemplates – Tobias

ответ

1

Без полного понимания вашего проекта это звучит скорее как дизайн, а не технический вопрос.
Для этого конкретного случая вам может потребоваться переместить всю общую логику из каждого «оружия» в один контроллер, который будет обрабатывать все оружие.
Этот контроллер будет отвечать за все частичные виды всего текущего и будущего оружия,
, в то время как основной вид вызовет соответствующий частичный вид в зависимости от типа оружия.
Что-то вроде:

Html.RenderPartial("~/Views/Weapon/" + Model.Type, Model); 

в контроллере оружия, вы будете иметь:

public class WeaponController : Controller 
{ 
    public ActionResult Axe 
    { //...} 

    public ActionResult Sword 
    { //...} 
} 
+0

привет YuriG, спасибо за дизайнерское предложение, хотя он явно не отвечает на мой вопрос: «Правильно ли использовать« Html.RenderPartial »для рендеринга (по существу) полного представления?» – globetrotter

+0

@ globetrotter, «правило большого пальца» будет - нет. вы не должны использовать частичный вид для замены полного представления. Однако правила в целом (и, в частности, правила большого пальца) должны быть разбиты. Итак, если ваша конкретная ситуация требует частичного просмотра, а не полного представления - пойдите для этого (Однако рассмотрите некоторые рефакторинги, чтобы избежать этого :)) – YuriG

Смежные вопросы