2016-10-20 2 views
0

Ich versuche, eine Liste von Benutzern in MVC zu erstellen. Dort gibt es eine Schaltfläche zum Hinzufügen von zufällig generierten Benutzern und für jeden Benutzer gibt es eine Löschschaltfläche, um sie zu löschen Liste. Ich sende es vom Controller zur Ansicht und es generiert einen Benutzer. Wenn ich versuche, eine weitere hinzuzufügen, wird sie einfach geändert. Ich denke, es löscht die Elemente in der Liste. Ich versuche, die Liste an den Controller zurückgeben, aber es funktioniert nicht. Kann jemand bitte helfen?Das Senden einer Liste von View zu Controller führt zu einer Nullliste in MVC

My Model:

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; 
    } 
} 

Meine Controller:

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); 
    } 

Und meine Ansicht einen Benutzer hinzuzufügen:

<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" /> 
} 
+0

Ihr Versuch, 'name' Attribute zu erzeugen, die keine Beziehung zu Ihrem Modell haben und niemals an sie binden würden (und der Code, den Sie gezeigt haben, wird aufgrund des fehlenden' @ 'in' @ gar keinen HTML generieren. Html.Hidden (...) '). Erzeugen Sie Ihre Ansicht korrekt mit '@for (int i = 0; i m [i] .Code) @ Html.TextBoxFor (m => m [i] .Name)} '. Dann verweisen [diese Antwort] (http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) –

Antwort

-1

Sie alle Eingaben des gleichen gleichen

nennen sollten
@Html.TextBox("UsersList", item.Name); 

- Aktion Methode

public ActionResult AddUser(List<string> UsersList){ 

}

+0

Noch kehrt zum Controller in eine Null-Liste. @using (Html.BeginForm ("AddUser", "Usermanagement", FormMethod.Post)) { foreach (var Element in Model) { @ Html.Hidden ("UsersList", item.Code); @ Html.Hidden ("Benutzerliste", Elementname); } } –

+0

Tritt immer noch in einer Nullliste zum Controller zurück. Ich verwendete: @Html.Versteckt ("UsersList", item.Code); @ Html.Hidden ("Benutzerliste", Elementname); –

0

Ihre Httppost Methode AddUser doesnt über die Liste kennen. Sie sollten ein ViewModel erstellen, das eine Liste von Benutzern enthält. Ein ViewModel ist eine Möglichkeit, Daten zwischen View und Controller zu übertragen. Der Benutzer bearbeitet das Modell, während sie sich auf der Seite befinden, und wenn sie auf Speichern/Löschen klicken, wird die HttpPost-Methode für diesen Controller aufgerufen. Erstellen Sie einen Parameter in der HttpPost-Methode, die das Modell ist. Die View kennt das ViewModel und sendet es an den Controller. Siehe Code unten.

Ansichtsmodell:

public class UserManageViewModel 
    { 
     public List<UsersClass> users {get; set;} 
    } 

Ausblick: die Linie @model UserManageViewModel ist von entscheidender Bedeutung für Ihre Ansicht, es wird nicht zu haben oder sonst wissen, was an den Controller zu senden.

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

Controller:

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); 
    } 

Hoffnung, das hilft. Prost :)

Verwandte Themen