Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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_Asp.net Mvc 3 - Fatal编程技术网

C# 使用多个模型的控制器?

C# 使用多个模型的控制器?,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,直到现在在C#MVC3中,我只需要使用一个只使用一个模型的控制器 但现在我想我需要访问控制器中的两个模型。我想知道MVC模式是否允许这样做 我有一个控制器。ProfileController显示用户的配置文件信息。但我还想展示一些其他数据,比如用户创建的组。为此,我还有一个GroupsModel 如何从一个控制器获取两个数据 如何从一个控制器获取两个数据 通过使用视图模型: public class MyViewModel { public ProfileModel Profile {

直到现在在C#MVC3中,我只需要使用一个只使用一个模型的控制器

但现在我想我需要访问控制器中的两个模型。我想知道MVC模式是否允许这样做

我有一个控制器。ProfileController显示用户的配置文件信息。但我还想展示一些其他数据,比如用户创建的组。为此,我还有一个GroupsModel

如何从一个控制器获取两个数据

如何从一个控制器获取两个数据

通过使用视图模型:

public class MyViewModel
{
    public ProfileModel Profile { get; set; }
    public GroupsModel Groups { get; set; }
}
@model MyViewModel
然后将此视图模型传递给视图:

public ActionResult ShowProfile()
{
    var model = new MyViewModel();
    model.Profile = ...
    model.Groups = ...
    return View(model);   
}
现在,您的视图将被强类型化为视图模型:

public class MyViewModel
{
    public ProfileModel Profile { get; set; }
    public GroupsModel Groups { get; set; }
}
@model MyViewModel
您可以显示以下信息:

@Html.DisplayFor(x => x.Profile.SomeProperty)
如何从一个控制器获取两个数据

通过使用视图模型:

public class MyViewModel
{
    public ProfileModel Profile { get; set; }
    public GroupsModel Groups { get; set; }
}
@model MyViewModel
然后将此视图模型传递给视图:

public ActionResult ShowProfile()
{
    var model = new MyViewModel();
    model.Profile = ...
    model.Groups = ...
    return View(model);   
}
现在,您的视图将被强类型化为视图模型:

public class MyViewModel
{
    public ProfileModel Profile { get; set; }
    public GroupsModel Groups { get; set; }
}
@model MyViewModel
您可以显示以下信息:

@Html.DisplayFor(x => x.Profile.SomeProperty)

假设您没有在单个视图/控制器中投入太多,为什么不编写一个包含所需数据的简单视图模型呢

public class ProfileInfo
{
   public Person Person
   {
      get;
      set;
   }

   public List<Group> Groups
   {
       get;
       set;
   }
}
public class ProfileInfo
{
公众人物
{
得到;
设置
}
公共列表组
{
得到;
设置
}
}

假设您没有在单个视图/控制器中投入太多,为什么不编写一个包含所需数据的简单视图模型呢

public class ProfileInfo
{
   public Person Person
   {
      get;
      set;
   }

   public List<Group> Groups
   {
       get;
       set;
   }
}
public class ProfileInfo
{
公众人物
{
得到;
设置
}
公共列表组
{
得到;
设置
}
}

谢谢,这是一个很好的解释。不过我想确定一件事。我可以把这个视图模型也放在“模型”文件夹中吗?还是创建一个名为“ViewModels”的单独文件夹更好?@w00-这完全取决于您,就个人而言,我倾向于将所有模型保存在同一文件夹中(不考虑视图/数据)。当然,除非需要分离,例如分层架构。这是一个有用的答案,因为它说明了@model关键字的灵活性。能够以模型的形式传递任何类型的对象意味着可以传递结构,在某些情况下,这可能对性能有点好处。谢谢,这是一个很好的解释。不过我想确定一件事。我可以把这个视图模型也放在“模型”文件夹中吗?还是创建一个名为“ViewModels”的单独文件夹更好?@w00-这完全取决于您,就个人而言,我倾向于将所有模型保存在同一文件夹中(不考虑视图/数据)。当然,除非需要分离,例如分层架构。这是一个有用的答案,因为它说明了@model关键字的灵活性。能够以模型的形式传递任何类型的对象意味着可以传递结构,在某些情况下,这对于性能来说可能更可取。