将List从View发送到Controller会导致MVC中的null List
本文关键字:List MVC 中的 null View Controller | 更新日期: 2023-09-27 18:13:53
我试图在MVC中创建一个用户列表,其中有一个按钮来添加随机生成的用户,并且每个用户都有一个删除按钮来从列表中删除它们。我把它从控制器发送到视图,它生成一个用户。当我想再加一个的时候,它就改变了。我猜它删除了列表中的项目。我试图将列表传递回控制器,但它不起作用。有人能帮忙吗?
我的模型:
public class UsersClass
{
public int Code { get; set; }
public string Name { get; set; }
public UsersClass(int Code, string Name)
{
this.Code = Code;
this.Name = Name;
}
}
My Controllers:
List<UsersClass> UsersList = new List<UsersClass>();
public ActionResult Index()
{
return View(UsersList);
}
[HttpPost]
public ActionResult AddUser(List<UsersClass> UsersList)
{
if (UsersList == null)
{
int a = 123;
UsersList = new List<UsersClass>();
}
Random generator = new Random();
string[] vez_nevek = new string[10] { "Kovács", "Szekeres", "Király", "Szabó", "Vicha", "Kozma", "Ferencz", "Pócsi", "Tinka", "Horváth" };
string[] ker_nevek = new string[10] { "Lajos", "Barnabás", "Róbert", "Balázs", "János", "Béla", "Petra", "Anna", "Ferenc", "Attila" };
string vezetek_nev = vez_nevek[generator.Next(vez_nevek.Length)];
string kereszt_nev = ker_nevek[generator.Next(ker_nevek.Length)];
UsersList.Add(new UsersClass(generator.Next(100000, 999999), vezetek_nev + " " + kereszt_nev));
return View("~/Views/UserManagement/Index.cshtml", UsersList);
}
和my View来添加一个用户:
<h2>User Management</h2>
@using (Html.BeginForm("AddUser", "UserManagement", FormMethod.Post))
{
int index = 0;
foreach (var item in Model)
{
Html.Hidden("item[" + index + "].Code", item.Code);
Html.TextBox("item[" + index + "].Name", item.Name);
index++;
}
<input type="submit" value="Add User" />
}
你的HttpPost方法AddUser不知道列表。您应该创建一个包含用户列表的ViewModel。ViewModel是视图和控制器之间通信数据的一种方式。用户在页面上编辑模型,当他们单击保存/删除时,该控制器的HttpPost方法将被调用。在HttpPost方法中创建一个作为模型的参数。视图知道ViewModel并将它发送给控制器。
ViewModel:
public class UserManageViewModel
{
public List<UsersClass> users {get; set;}
}
视图:@model UserManageViewModel
行对于视图来说是至关重要的,否则它就不知道要发送什么给控制器。
@model UserManageViewModel
<h2>User Management</h2>
@using (Html.BeginForm("AddUser", "UserManagement", FormMethod.Post))
{
int index = 0;
foreach (var item in Model.users)
{
Html.Hidden("item[" + index + "].Code", item.Code);
Html.TextBox("item[" + index + "].Name", item.Name);
index++;
}
<input type="submit" value="Add User" />
}
控制器:
public ActionResult Index()
{
UserManageViewModel model = new UserManageViewModel();
model.users = new List<UsersClass>();
return View(model);
}
[HttpPost]
public ActionResult AddUser(UserManageViewModel model)
{
if (model.users.IsEmpty() || model.users == null)
{
int a = 123;
model.users = new List<UsersClass>();
}
Random generator = new Random();
string[] vez_nevek = new string[10] { "Kovács", "Szekeres", "Király", "Szabó", "Vicha", "Kozma", "Ferencz", "Pócsi", "Tinka", "Horváth" };
string[] ker_nevek = new string[10] { "Lajos", "Barnabás", "Róbert", "Balázs", "János", "Béla", "Petra", "Anna", "Ferenc", "Attila" };
string vezetek_nev = vez_nevek[generator.Next(vez_nevek.Length)];
string kereszt_nev = ker_nevek[generator.Next(ker_nevek.Length)];
model.users.Add(new UsersClass(generator.Next(100000, 999999), vezetek_nev + " " + kereszt_nev));
return View(model);
}
希望这对你有帮助。欢呼:)
您应该将所有输入命名为相同的
@Html.TextBox("UsersList", item.Name);
-动作方法
public ActionResult AddUser(List<string> UsersList){
}