一个视图的两个 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 在不需要时对整个视图模型进行编辑有什么意义。公平的问题。
有多种方法可以做到这一点。这是一种方法:
- 创建具有通用属性的基础 class(用于 posting)
- 为视图创建具有更多属性的派生 class。
有些人会将 1 称为数据传输对象 (DTO)。这些 DTO 将被共享用于表示层、服务层、业务层、数据访问层等之间的通信。
我正在使用 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 在不需要时对整个视图模型进行编辑有什么意义。公平的问题。
有多种方法可以做到这一点。这是一种方法:
- 创建具有通用属性的基础 class(用于 posting)
- 为视图创建具有更多属性的派生 class。
有些人会将 1 称为数据传输对象 (DTO)。这些 DTO 将被共享用于表示层、服务层、业务层、数据访问层等之间的通信。