一个视图的两个ViewModel

时间:2016-11-27 23:54:17

标签: c# asp.net-mvc viewmodel

我正在使用ASP.NET MVC开发一个Web应用程序,我一直在努力避免使用ViewBag,因此我创建了一些viewmodel来填充我的下拉列表,并且通常在我的视图中传递我需要的数据。同时我想保持数据绑定的清晰,避免不受限制的属性(不使用include / exclude属性),并且我被告知显然返回模型非常适用于此目的。

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

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

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;
    ...
}

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

1 个答案:

答案 0 :(得分:2)

我想我知道你在问什么。你说你有一个viewmodel,比方说,这些属性:Age,Name,CountryOfResidence(用于下拉列表),还有一些属性。但是当你创建一个新人时,你只会将Age,Name,IdOfCountry发布给控制器。

所以你的问题是在不需要时发布整个视图模型的重点是什么。公平的问题。

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

  1. 创建具有公共属性(用于发布)的基类
  2. 创建一个具有更多视图属性的派生类。
  3. 有些人会将1称为数据传输对象(DTO)。这些DTO将被共享用于表示层,服务层,业务层,数据访问层等之间的通信。