C# 一个视图的两个视图模型
我正在使用ASP.NET MVC开发一个Web应用程序,我一直试图避免使用ViewBag,因此我创建了几个viewmodels来填充我的下拉列表,并通常在视图中传递我需要的数据。同时,我希望保持数据绑定干净,避免绑定不到的属性(不使用include/exclude属性),我被告知显然returnmodels非常适合这个目的 那么,为一个视图创建两个独立的模型是一个坏主意吗?一个包含所有需要显示的数据,另一个只包含我表格中的字段,或者这是形式多于实质,我应该重新考虑更改我的设计吗 编辑:一个简单的例子,因为我不太擅长解释C# 一个视图的两个视图模型,c#,asp.net-mvc,viewmodel,C#,Asp.net Mvc,Viewmodel,我正在使用ASP.NET MVC开发一个Web应用程序,我一直试图避免使用ViewBag,因此我创建了几个viewmodels来填充我的下拉列表,并通常在视图中传递我需要的数据。同时,我希望保持数据绑定干净,避免绑定不到的属性(不使用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
...
}
class ViewModelA{//传递给视图,然后在提交表单时绑定到
List DropDownValues;//在数据绑定时将始终为空
int SelectedValue;//传递到视图时将始终为0
...
}
我是否应该用替换ViewModelA
class ViewModelB{ // contains data passed to the view
List<KeyValuePair<int, string>> DropDownValues;
...
}
class ReturnModel{ // contains data returned from the view
int SelectedValue;
...
}
class ViewModelB{//包含传递给视图的数据
列出下拉列表值;
...
}
类ReturnModel{//包含从视图返回的数据
int选择值;
...
}
显然,这里我可以直接绑定到我的模型,但假设它更复杂,在保存之前必须对数据进行处理。我想我知道你在问什么。您是说您有一个viewmodel,比如说,它具有以下属性:年龄、姓名、居住国(用于下拉),以及其他一些属性。但是,当你创建一个新的人时,你只需将年龄、姓名、国籍等信息发布给管理员 因此,您的问题是,当不需要发布整个viewmodel时,发布它的意义何在。公平的问题 有很多方法可以做到这一点。这里有一个方法:
有些人将1称为数据传输对象(DTO)。这些DTO将共享用于表示层、服务层、业务层、数据访问层等之间的通信。我想我知道您的要求。您是说您有一个viewmodel,比如说,它具有以下属性:年龄、姓名、居住国(用于下拉),以及其他一些属性。但是,当你创建一个新的人时,你只需将年龄、姓名、国籍等信息发布给管理员 因此,您的问题是,当不需要发布整个viewmodel时,发布它的意义何在。公平的问题 有很多方法可以做到这一点。这里有一个方法:
有些人将1称为数据传输对象(DTO)。这些DTO将被共享,用于表示层、服务层、业务层、数据访问层等之间的通信。您的视图模型具有视图所需的所有属性,这里的混淆到底是什么?是的,但同时它有许多不必要的字段,data binder可能需要处理,那么,我应该仅仅为post数据创建另一个吗?还是让它这样?为什么视图模型中会有不必要的字段?因为当我将数据传递给视图时,我会从中填充下拉列表等。这样,属性将永远不会绑定到,并且将保持为空。您知道,类可以具有作为类实例的属性吗?将它们放在另一个类中,即视图的VM视图模型具有视图所需的所有属性,这里的混淆到底是什么?是的,但同时它有许多不必要的字段,data binder可能需要处理,那么,我应该仅仅为post数据创建另一个吗?还是让它这样?为什么视图模型中会有不必要的字段?因为当我将数据传递给视图时,我会从中填充下拉列表等。这样,属性将永远不会绑定到,并且将保持为空。您知道,类可以具有作为类实例的属性吗?把它们放到另一个类中,这就是你视图的VM是的,这正是我要问的。尽管我只是想知道这是否是一个好主意,或者有两个模型——一个用于发布(或您称之为DTO),另一个作为viewmodel将数据传递到视图——被认为是不好的做法。不,这不是不好的做法。这实际上是一个很好的实践,因为你提到的原因,也因为它明确了行动方法的意图:我只需要这个对象来完成我的工作。我见过一些动作方法,人们通过巨大的视图模型,他们只需要20%的属性。Oh和DTO是一个常见的术语。不是我的。是的,这正是我要问的。尽管我只是想知道这是否是一个好主意,或者有两个模型——一个用于发布(或您称之为DTO),另一个作为viewmodel将数据传递到视图——被认为是不好的做法。不,这不是不好的做法。这实际上是一个很好的实践,因为你提到的原因,也因为它明确了行动方法的意图:我只需要这个对象来完成我的工作。我见过一些动作方法,人们通过巨大的视图模型,他们只需要20%的属性。Oh和DTO是一个常见的术语。不是我的。