Asp.net mvc 5 Viewmodel创建两次
我将LoginViewModel的实例传递给我的视图(登录) 当我单击表单上的submit按钮时,会创建LoginViewModel的另一个实例。 我可以观察到这一点,因为我在构造函数中放置了一个断点 为什么会发生这种情况?我如何修复它Asp.net mvc 5 Viewmodel创建两次,asp.net-mvc-5,Asp.net Mvc 5,我将LoginViewModel的实例传递给我的视图(登录) 当我单击表单上的submit按钮时,会创建LoginViewModel的另一个实例。 我可以观察到这一点,因为我在构造函数中放置了一个断点 为什么会发生这种情况?我如何修复它 @using ViewModels @model LoginViewModel <form action="~/Home/VerifyLogin" method="post"> <table> <t
@using ViewModels
@model LoginViewModel
<form action="~/Home/VerifyLogin" method="post">
<table>
<tr>
<td>
User Name:
</td>
<td>
@Html.DropDownListFor(m => m.SelectedUserID, Model.UserList);
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
@Html.TextAreaFor(m => m.SelectedPassword);
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value ="Login" />
</td>
</tr>
</table>
</form>
视图模型
public class LoginViewModel :BaseViewModel
{
public IEnumerable<User> Users { get; private set; }
public IEnumerable<SelectListItem> UserList { get; private set; }
public int SelectedUserID { get; set; }
public string SelectedPassword { get; set; }
public LoginViewModel()
{
Users = DataService.GetUsers();
UserList = new SelectList(Users, "ID", "Name");
}
public bool Login(string userName, string password)
{
return true;
}
}
public类LoginViewModel:BaseViewModel
{
公共IEnumerable用户{get;private set;}
公共IEnumerable用户列表{get;private set;}
public int SelectedUserID{get;set;}
公共字符串SelectedPassword{get;set;}
公共登录视图模型()
{
Users=DataService.GetUsers();
UserList=新的SelectList(用户,“ID”,“名称”);
}
公共bool登录(字符串用户名、字符串密码)
{
返回true;
}
}
这里创建了一个
return View("Login", new LoginViewModel());
一个是在这里创建的
public void VerifyLogin(LoginViewModel vm)
模型绑定器创建对象,并使用从请求接收的参数填充对象。这是正常操作
为了解决你的问题,我会这样做
public ActionResult RedirectToLogin()
{
var vm = new LoginViewModel()
{
Users = DataService.GetUsers();
UserList = new SelectList(Users, "ID", "Name");
};
return View("Login", vm);
}
public LoginViewModel()
{
//Removed code
}
public ActionResult RedirectToLogin()
{
var vm = new LoginViewModel()
{
Users = DataService.GetUsers();
UserList = new SelectList(Users, "ID", "Name");
};
return View("Login", vm);
}
public LoginViewModel()
{
//Removed code
}