2011-03-31 86 views
0

我有一個瀏覽用戶:設計問題MVC 3.0

public class User { 
    public int id { get; set; } 
    public string name { get; set; } 
    public string email { get; set; }  
} 

我創建一個登錄視圖(強類型的用戶)... 但我的登錄視圖具有其他屬性,如與rememberMe複選框...這屬性不屬於用戶模型...

那麼,處理這個問題的最好方法是怎麼樣的?創建所有視圖屬性是一個選項,一個新的UserViewModel,但我認爲它不是最好的辦法...

保羅

回答

2

那麼,如何應對,最好的方法是什麼?

通過使用視圖模型:

public class LoginViewModel 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
} 

強類型的登錄部分到用戶模型幾乎不很有意義。

+0

感謝,並在該視圖模型會留下來嗎?在與模型相同的項目中? – Paul 2011-03-31 20:10:50

+1

@Paul,視圖模型屬於MVC應用程序層,因爲它們與其相應的視圖緊密相關。 'Models'文件夾似乎是一個放置它們的好地方。 – 2011-03-31 20:12:03

+0

感謝Darin ...你怎麼想的不要創建ViewModel,而只是在View方法中添加RememberMe,比如:public ActionResult Index(User user,bool RememberMe )?它工作的很好,但我不知道最佳實踐... – Paul 2011-03-31 20:47:04

1

爲了獲得最佳實踐,我建議您使用Darin建議的ViewModel。你也可以創建一個工廠將ViewModel複製到實體。這裏的反射太多了。

這裏只是達林迪米特羅夫的詳細例子。

public class User 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
} 

public class LoginViewModel 
{ 
    [Required] ... and other validation 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public bool RememberMe { get; set; } 
} 

public static class UserFactory 
{ 
    public static User GetUserFromModel(LoginViewModel m, User u) 
    { 
     u.Username = m.Username; 
     u.Password = m.Password; 
     return u; 
    } 
} 

public class UserController : DefaultController 
{ 
    public ActionResult Login(LoginViewModel m) 
    { 
     if (ModelState.IsValid) 
     { 
      User u = UserFactory.GetUserFromModel(m); 
      ....code ... 
     } 
     ... code... 
    } 

} 

@Darin對不起,劫持你的榜樣,我記得有一點很難與這個自己,所以只是想幫助