2013-12-19 284 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

相關問題