Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个视图的两个视图模型_C#_Asp.net Mvc_Viewmodel - Fatal编程技术网

C# 一个视图的两个视图模型

C# 一个视图的两个视图模型,c#,asp.net-mvc,viewmodel,C#,Asp.net Mvc,Viewmodel,我正在使用ASP.NET MVC开发一个Web应用程序,我一直试图避免使用ViewBag,因此我创建了几个viewmodels来填充我的下拉列表,并通常在视图中传递我需要的数据。同时,我希望保持数据绑定干净,避免绑定不到的属性(不使用include/exclude属性),我被告知显然returnmodels非常适合这个目的 那么,为一个视图创建两个独立的模型是一个坏主意吗?一个包含所有需要显示的数据,另一个只包含我表格中的字段,或者这是形式多于实质,我应该重新考虑更改我的设计吗 编辑:一个简单的

我正在使用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是一个常见的术语。不是我的。