2014-06-22 53 views
0

我是MVC的新手,沒有找到將類型模型返回到視圖的正確方法的示例。我需要創建一個視圖,以允許經過身份驗證的用戶編輯他們的一些配置文件。MVC - 爲編輯配置文件從控制器返回模型

作爲測試,我創建了一個控制器操作,返回一個ApplicationUser模型和查看頁面,該頁面在表單字段中顯示該配置文件。這有效,但它包含所有的用戶配置文件,這不是我想要的。爲了測試我寫了下面:

Public ActionResult EditProfile() 
{ 
    ApplicationUser user = UserManager.FindById(User.Identity.GetUserId()); 

    return View(user) 
} 

當然,這樣做的工作,我知道我可以顯示任何我的看法一樣,雖然我不知道,如果是將返回所有的最佳實踐用戶的個人資料到視圖時,我只需要允許編輯他們的一些設置。

因此,我創建了一個新的ViewModel,只有需要的字段和基於該模型的新視圖。它的工作原理,但我仍然覺得我做得不好。在控制器操作中,我這樣做了:

public ActionResult EditProfile() 
{ 
    ApplicationUser user = UserManager.FindById(User.Identity.GetUserId()); 
    EditProfileViewModel model = new EditProfileViewModel(); 

    model.Email = user.Email; 
    model.Company = user.Company; 
    model.Name = user.Name; 
    model.PhoneNumber = user.PhoneNumber; 
    model.CountryCode = user.CountryCode; 
    model.StateProvince = user.StateProvince; 
    model.Language = user.Language; 
    model.StateProvinceCode = user.StateProvinceCode; 

    return View(model); 
} 

這似乎沒有必要和可怕的維護。我很抱歉提出這樣一個基本問題。我誠實地搜索了'網絡的例子,我知道他們在那裏,但我沒有找到我覺得適用於我的問題。

順便說一句,控制器裝飾着[授權],所以我認爲這個動作/視圖只能由經過驗證的用戶訪問。

如果有人能夠向我展示填充模型並將其傳遞給控制器​​的正確方法示例,我將更好地理解。似乎這應該能夠在幾行代碼中完成。

+0

將視圖模型中的構造函數放入接收域模型。更容易維護。新的EditProfileViewModel(用戶); – gnome

回答

2

那麼,首先沒有什麼可擔心的,因爲一切都在服務器端處理。如果你想創建自定義模型,它看起來過載,因爲你現在必須做更多的事務

  1. 將數據從原始模型複製到自定義模型。
  2. [HttpPost]操作中,您必須獲取原始模型數據並覆蓋來自定製模型的新更新字段。

如果您使用原始模型,只需在視圖和[HttpPost]動作中獲取原始記錄並替換從視圖中獲取的字段,則更好。

+0

你說我的第一種方法是可以接受的(將用戶返回到視圖),我唯一需要擔心的是向用戶顯示必要的字段?我絕對喜歡這樣,這將更容易維護。我只是不認爲這是正確的做法。學習曲線...:S – rwkiii

+0

是的,但是如果你做了那個客戶端,在這種情況下使用ajax你需要使用自定義模型。但這裏很好 –

+0

哦,這大大簡化了事情和我的理解。難怪我沒有找到如何完成我的第二種方法的例子。謝謝拉什敏。 – rwkiii

相關問題