将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" />
}

将List从View发送到Controller会导致MVC中的null List

你的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){

}

相关文章: