Mvc 3 - 在标准和管理界面使用相同的视图和视图模型?

时间:2012-07-27 16:44:10

标签: asp.net-mvc-3 viewmodel

我有两个屏幕,一个标准用户屏幕和一个管理屏幕。两者之间的变化相当小 - 管理界面上的一些额外按钮和选项。

就MVC最佳实践而言,最好是:

  1. 对管理员和标准用户屏幕使用相同的视图和相同的viewmodel 。这样就没有代码重复,但我在视图和控制器中会有几个if ... else语句

  2. 对管理员和用户屏幕使用单独的视图和视图模型。这会导致一些代码重复,但如果屏幕最终发散的程度超过目前的水平,则最终是最灵活的。

  3. 其他一些很好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

我会使用单独的viewmodels并将继承应用于ViewModel。因此,您不会复制代码。

public class CustomerCreateViewModel
{
  //Here i i have properties common to both user and admin
  public string FirstName { set;get;}
  public string LastName { set;get;}
}
public class AdminCustomerCreateViewModel : CustomerCreateViewModel
{
  //This property is only for admin
  public string ReasonForFiring { set;get;}
}

我个人更喜欢保持单独的视图,因为它使事情更干净,更易读/可维护。现在您有2个单独的ViewModel,因此具有单独的视图。您可以考虑根据需要渲染部分视图(在两个视图中)

答案 1 :(得分:0)

这真的只是一个你可以回答的问题。你基本上说过,如果更改很小,那么我们就是一个视图,并将管理函数包装在检查用户角色的if语句中。

但是,如果管理员和非管理员版本之间没有模型更改,我只会这样做。添加其他模型项后,我会建议使用单独的模型和视图。