C# 使用多个模型的控制器?
直到现在在C#MVC3中,我只需要使用一个只使用一个模型的控制器 但现在我想我需要访问控制器中的两个模型。我想知道MVC模式是否允许这样做 我有一个控制器。ProfileController显示用户的配置文件信息。但我还想展示一些其他数据,比如用户创建的组。为此,我还有一个GroupsModel 如何从一个控制器获取两个数据 如何从一个控制器获取两个数据 通过使用视图模型: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 {
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关键字的灵活性。能够以模型的形式传递任何类型的对象意味着可以传递结构,在某些情况下,这对于性能来说可能更可取。