将数据从控制器传递到asp.net中的视图

时间:2013-12-19 08:27:28

标签: asp.net-mvc asp.net-mvc-4 razor

我目前正在asp.net MVC 4上开发一个网站。 我对将数据从控制器传递到视图的不同方式感到困惑。

首先,如果我们有一个对象列表用户,使用以下命令将此列表传递给视图有什么区别:

return View(users);

ViewBag.users = users;

我的另一个问题是第一个解决方案。 如果我们使用此解决方案,我们是否必须使用此

@model IEnumerable<mydb.users>

在视图中?

或者我们可以使用例如

@model IEnumerable<mydb.registrations>

我知道在视图中使用不同于我们在控制器中使用的模型会很奇怪,但VS似乎并没有被打扰。

为你解答很多问题

2 个答案:

答案 0 :(得分:3)

您可以根据需要传递参数,但最好的方法是为每个视图制作自己的“视图模型”。

public class UsersViewModel
{
    public IEnumerable<UserViewModel> Users { get; set; }
    public int UserCount { get; set; }
}

然后将此视图模型传递回视图:

var viewModel = new UsersViewModel();
// ...
return View(viewModel);

您可以使用Automapper tool自动将您的实体转换为视图模型并返回。它看起来像这样:

// in Global.asax.cs on Application_Start

Mapper.CreateMap<User, UserViewModel>();
Mapper.CreateMap<IEnumerable<User>, UsersViewModel>();

// in your action

var viewModel = Mapper.Map<UsersViewModel>(mydb.users);

您的视图模型将自动创建,请查看automapper文档以获取更多信息。有关Automapper使用的好例子,请参见RacoonBlog

答案 1 :(得分:1)

ViewBag是一个容器。您可以使用ViewBag将任何内容传递给View,将其称为字符串或类或其他内容。您可以使用任何no ViewBag来传递给控制器​​查看。

return View(users);这里有列表,你只能将一个对象作为模型从控制器传递到视图。

对第二个问题的回复你可以使用@model接收对象Model to View,其中我们使用对Object的引用,特别是通用的。控制器有助于识别传递给视图的内容。您可以在View中使用Model进行进一步编码。例如:Model.Users