我目前正在asp.net MVC 4上开发一个网站。 我对将数据从控制器传递到视图的不同方式感到困惑。
首先,如果我们有一个对象列表用户,使用以下命令将此列表传递给视图有什么区别:
return View(users);
和
ViewBag.users = users;
我的另一个问题是第一个解决方案。 如果我们使用此解决方案,我们是否必须使用此
@model IEnumerable<mydb.users>
在视图中?
或者我们可以使用例如
@model IEnumerable<mydb.registrations>
我知道在视图中使用不同于我们在控制器中使用的模型会很奇怪,但VS似乎并没有被打扰。
为你解答很多问题
答案 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