2013-12-19 3 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 для получения дополнительной информации. Хорошие примеры использования Automapper доступны в RacoonBlog.

+0

привет спасибо за ваш ответ. В настоящее время я читаю документацию по MVVM. Но я действительно не понимаю разницу между созданием ViewModel и прямым предоставлением объектов? Следует ли ограничивать поля, отправленные на просмотр? – Krowar

+0

Это считается хорошей практикой, чтобы отделить ваш взгляд и бизнес-логику. Automapper действует как уровень, который выполняет все операции neccesarry для выполнения объектов преобразования <-> viewmodels. Если у вас небольшое приложение или ограниченное время и бюджет, я думаю, что все в порядке, сделайте это так, как хотите.Но когда дело доходит до хороших практик и поддержания вашего приложения в обслуживании и понимании для других, взглянуть на модели - хороший способ. –

1

ViewBag is a container. Вы можете передать что-либо в представление, используя ViewBag, чтобы сказать, что это строка или класс или что-то еще. Вы можете использовать любой из ViewBags для перехода к просмотру с контроллера.

return View(users); здесь у вас есть список, и вы можете передать только один объект в качестве модели из контроллера для просмотра.

Ответ на второй вопрос, который вы можете получить объекту Model to View с помощью @model, где мы используем ссылку на объект, в частности, который является общим. Контроллер помогает определить, что передается в представление. Вы можете использовать его в дальнейшем кодировании с помощью модели в вашем представлении. ex: Model.Users

Смежные вопросы