一个视图的两个 ViewModel

Two ViewModels for one View

我正在使用 ASP.NET MVC 开发 Web 应用程序,并且我一直在尝试避免使用 ViewBag,因此我创建了几个视图模型来填充我的下拉列表,并且通常是为了传递我的数据在我看来需要。同时,我想保持数据绑定干净并避免不会绑定到的属性(不使用 include/exclude 属性)并且我被告知显然 returnmodels 非常适合这个目的。

那么为一个视图创建两个独立的模型是个坏主意吗?一个包含所有需要显示的数据,另一个仅包含我表单中的字段,或者这是形式多于实质,我应该重新考虑更改我的设计吗?

编辑:一个简单的例子,因为我不太擅长解释

class ViewModelA{ // passed to the view and then bound to when form is submitted
    List<KeyValuePair<int, string>> DropDownValues; // will be always empty while databinding
    int SelectedValue; // will be always 0 when passed to the view
    ...
}

我应该用

替换 ViewModelA 吗
class ViewModelB{ // contains data passed to the view
    List<KeyValuePair<int, string>> DropDownValues;
    ...
}


class ReturnModel{ // contains data returned from the view
    int SelectedValue;
    ...
}

显然在这里我可以直接绑定到我的模型,但我们假设它更复杂并且必须在保存之前处理数据。

我想我知道你在问什么。你是说你有一个视图模型,比方说,这些属性:Age、Name、CountryOfResidence(用于下拉列表)和其他一些属性。但是当你创建一个新人时,你只需要 post Age, Name, IdOfCountry 给 controller。

所以您的问题是 post 在不需要时对整个视图模型进行编辑有什么意义。公平的问题。

有多种方法可以做到这一点。这是一种方法:

  1. 创建具有通用属性的基础 class(用于 posting)
  2. 为视图创建具有更多属性的派生 class。

有些人会将 1 称为数据传输对象 (DTO)。这些 DTO 将被共享用于表示层、服务层、业务层、数据访问层等之间的通信。