2013-12-19 287 views
0

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

首先,如果我们有对象的用户列表,有什么用通过这个列表视图之间的区别:

return View(users); 

ViewBag.users = users; 

我的另一个问题是关于第一个方案 如果我们使用此解决方案,我们是否有使用这个

@model IEnumerable<mydb.users> 
在查看

或者,我们可以使用例如

@model IEnumerable<mydb.registrations> 

我知道这将是奇怪的比我们的控制器所使用的视图使用不同的模型,但是VS似乎并不被人打扰。

Thanls很多关于你的回答

回答

3

可以传递参数,只要你想,但最好的方法就是让自己的“视图模式”为每个视图。

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

然后通过这个视图模型回视图:

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

您可以使用Automapper tool自动将您的实体转换成的ViewModels和背部。它看起来像这样:

// 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文档以获取更多信息。在RacoonBlog中提供了有关Automapper使用情况的良好示例。

+0

嗨,谢谢你的回答。我目前正在阅读有关MVVM的文档。 但我真的没有区别创建ViewModel和直接给我的实体? 是否仅限于发送给视图的字段? – Krowar

+0

将您的视图和业务逻辑分开是一种很好的做法。 Automapper充当执行所有neccesarry操作来执行转换实体视图模型的层。如果您的应用程序很少或时间和预算有限,我认为您可以以任何方式执行此操作。但是,如果涉及到良好的实践并保持应用程序的可维护性和可理解性,则查看模型是最好的选择。 –

1

ViewBag是一个容器。您可以使用ViewBag将任何内容传递给视图,将其称为字符串或类或其他内容。您可以使用任何没有ViewBag来通过控制器查看。

return View(users);在这里你有列表,你可以只传递一个对象作为模型从控制器来查看。

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

相关问题