Asp.net mvc 3 MVC3.0的设计问题

Asp.net mvc 3 MVC3.0的设计问题,asp.net-mvc-3,Asp.net Mvc 3,我有一个视图用户: public class User { public int id { get; set; } public string name { get; set; } public string email { get; set; } } 我创建了一个登录视图(强类型用户)。。。 但是我的登录视图还有其他属性,比如RememberMe复选框。。。该属性不属于用户模型 那么,最好的解决方法是什么呢?创建具有所有视图属性的新UserViewModel是一个选

我有一个视图用户:

public class User {
   public int id { get; set; }
   public string name { get; set; }
   public string email { get; set; }    
}
我创建了一个登录视图(强类型用户)。。。 但是我的登录视图还有其他属性,比如RememberMe复选框。。。该属性不属于用户模型

那么,最好的解决方法是什么呢?创建具有所有视图属性的新UserViewModel是一个选项,但我认为这不是最好的方法

保罗

那么,最好的解决方法是什么呢

通过使用视图模型:

public class LoginViewModel
{
    public string Username { get; set; }
    public string Password { get; set; }  
    public bool RememberMe { get; set; }  
}
强烈输入用户模型的部分登录名几乎没有意义

那么,最好的解决方法是什么呢

通过使用视图模型:

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

强烈输入用户模型的部分登录名几乎没有意义。

对于最佳实践,我建议您使用Darin建议的ViewModel。您还可以创建一个工厂,用于将ViewModel复制到实体。这里的反射有点太多了

下面是Darin Dimitrov的详细示例

    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很抱歉高举了你的例子,我记得自己在这方面有点困难,所以我想帮助你获得最佳实践,我建议你按照Darin的建议使用ViewModel。您还可以创建一个工厂,用于将ViewModel复制到实体。这里的反射有点太多了

下面是Darin Dimitrov的详细示例

    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很抱歉高举了你的例子,我记得我自己在这方面有点困难,所以我只想帮助你

谢谢,那么ViewModel将停留在哪里?在与Models?Paul相同的项目中,视图模型属于MVC应用层,因为它们与相应的视图紧密相连。
Models
文件夹似乎是放置它们的好地方。谢谢Darin。。。您认为不创建视图模型,而只添加视图上的RememberMe方法怎么样,比如:public ActionResult Index(User-User,bool-RememberMe)?它工作得很好,但我不知道最好的实践…@Paul,就我个人而言,我总是创建视图模型,无论是作为控制器动作的输入还是输出。你的方法也会奏效。我不能说哪一个更好,因为这是主观的。我只能告诉你我更喜欢什么。谢谢,那个ViewModel会住在哪里?在与Models?Paul相同的项目中,视图模型属于MVC应用层,因为它们与相应的视图紧密相连。
Models
文件夹似乎是放置它们的好地方。谢谢Darin。。。您认为不创建视图模型,而只添加视图上的RememberMe方法怎么样,比如:public ActionResult Index(User-User,bool-RememberMe)?它工作得很好,但我不知道最好的实践…@Paul,就我个人而言,我总是创建视图模型,无论是作为控制器动作的输入还是输出。你的方法也会奏效。我不能说哪一个更好,因为这是主观的。我只能告诉你我喜欢什么。