Question

I know this question has been asked before, but i have followed the answers from other threads like this still but still couldn't solve my problem.

So what i have is a form with a list that has another list in it and i would like to retrieve all these items in my post action controller so i can update the permissions in my controller. But i am currently unable to retrieve my items in my post action and i don't know why.

View:

@using (Html.BeginForm())
                {
                    <ul class="nav well-tabs well-tabs-inverse margin-bottom">
                        @for (int counter = 0; Model.Count > counter; counter++)
                        {
                            <li @if (counter == 0) { @Html.Raw("class='active'")  }><a href="@Html.Raw("#tab" + counter)" data-toggle="tab">@Model[counter].Permissions.RoleName</a></li>
                        }
                    </ul>
                    <!-- Rechten Content -->
                    <div class="tab-content border-none padding-none">

                        @for (int counter = 0; Model.Count > counter; counter++)
                        {
                            <div @Html.Raw(string.Format("id=tab{0}", counter)) class="tab-pane @if (counter == 0)
                                                                                                {
                                                                                                    @Html.Raw("active")
                                                                                                }">
                                <table class="table table-widget table-striped">
                                    <thead>
                                        <tr>
                                            <th>Recht</th>
                                            <th>Machtiging</th>
                                        </tr>
                                    </thead>
                                    <tbody>
                                        <!-- Get all the updated permissions -->
                                        @for (int counter2 = 0; Model[counter].Permissions.Rights.Count() > counter2; counter2++)
                                        {
                                             <tr>
                                                <td>@Model[counter].Permissions.Rights[counter2].RightName</td>
                                                <td>@Html.CheckBoxFor(m=> m[counter].Items[counter2].Selected)
                                                @Html.HiddenFor(m => m[counter].Items[counter2].RightId)
                                                @Html.HiddenFor(m => m[counter].Items[counter2].RoleName)
                                                </td>
                                            </tr>
                                        }
                                    </tbody>
                                </table>
                            </div>
                        }
                        <input type="submit" value="Gegevens opslaan" css="btn btn-info" />
                    </div>

                }

Model:

  public class ViewRolePermissionsModel
{
    public Permissions Permissions { get; set; }
    public List<Items> Items;
}

// Sub class
public class Permissions
{
    public string RoleName { get; set; }
    public List<RightModel> Rights { get; set; }
}

// Sub class
public class RightModel
{
    public int RightId { get; set; }
    public string RightName { get; set; }
}

// Sub class
public class Items
{
    public int RightId { get; set; }
    public string RoleName { get; set; }
    public bool Selected { get; set; }
}

This results as this in my view: End result html

This is what my controller generates and what i would also like to get in my post action: Controller generated code

What my post action retrieves: enter image description here

The results of the post are submitted, just the items (that's what i need)

[0].Items[0].RightId    1
[0].Items[0].RoleName   Administratoren
[0].Items[0].Selected   false
[0].Items[10].RightId   11
[0].Items[10].RoleName  Administratoren
[0].Items[10].Selected  false
[0].Items[11].RightId   12
[0].Items[11].RoleName  Administratoren
[0].Items[11].Selected  false
[0].Items[1].RightId    2
[0].Items[1].RoleName   Administratoren
[0].Items[1].Selected   false
[0].Items[2].RightId    3
[0].Items[2].RoleName   Administratoren
[0].Items[2].Selected   false
[0].Items[3].RightId    4
[0].Items[3].RoleName   Administratoren
[0].Items[3].Selected   false
[0].Items[4].RightId    5
[0].Items[4].RoleName   Administratoren
[0].Items[4].Selected   false
[0].Items[5].RightId    6
[0].Items[5].RoleName   Administratoren
[0].Items[5].Selected   false
[0].Items[6].RightId    7
[0].Items[6].RoleName   Administratoren
[0].Items[6].Selected   false
[0].Items[7].RightId    8
[0].Items[7].RoleName   Administratoren
[0].Items[7].Selected   false
[0].Items[8].RightId    9
[0].Items[8].RoleName   Administratoren
[0].Items[8].Selected   false
[0].Items[9].RightId    10
[0].Items[9].RoleName   Administratoren
[0].Items[9].Selected   false
[1].Items[0].RightId    1
[1].Items[0].RoleName   Leden
[1].Items[0].Selected   false
[1].Items[10].RightId   11
[1].Items[10].RoleName  Leden
[1].Items[10].Selected  false
[1].Items[11].RightId   12
[1].Items[11].RoleName  Leden
[1].Items[11].Selected  false
[1].Items[1].RightId    2
[1].Items[1].RoleName   Leden
[1].Items[1].Selected   false
[1].Items[2].RightId    3
[1].Items[2].RoleName   Leden
[1].Items[2].Selected   false
[1].Items[3].RightId    4
[1].Items[3].RoleName   Leden
[1].Items[3].Selected   false
[1].Items[4].RightId    5
[1].Items[4].RoleName   Leden
[1].Items[4].Selected   false
[1].Items[5].RightId    6
[1].Items[5].RoleName   Leden
[1].Items[5].Selected   false
[1].Items[6].RightId    7
[1].Items[6].RoleName   Leden
[1].Items[6].Selected   false
[1].Items[7].RightId    8
[1].Items[7].RoleName   Leden
[1].Items[7].Selected   false
[1].Items[8].RightId    9
[1].Items[8].RoleName   Leden
[1].Items[8].Selected   false
[1].Items[9].RightId    10
[1].Items[9].RoleName   Leden
[1].Items[9].Selected   false
[2].Items[0].RightId    1
[2].Items[0].RoleName   Medewerkers
[2].Items[0].Selected   false
[2].Items[10].RightId   11
[2].Items[10].RoleName  Medewerkers
[2].Items[10].Selected  false
[2].Items[11].RightId   12
[2].Items[11].RoleName  Medewerkers
[2].Items[11].Selected  false
[2].Items[1].RightId    2
[2].Items[1].RoleName   Medewerkers
[2].Items[1].Selected   false
[2].Items[2].RightId    3
[2].Items[2].RoleName   Medewerkers
[2].Items[2].Selected   false
[2].Items[3].RightId    4
[2].Items[3].RoleName   Medewerkers
[2].Items[3].Selected   false
[2].Items[4].RightId    5
[2].Items[4].RoleName   Medewerkers
[2].Items[4].Selected   false
[2].Items[5].RightId    6
[2].Items[5].RoleName   Medewerkers
[2].Items[5].Selected   false
[2].Items[6].RightId    7
[2].Items[6].RoleName   Medewerkers
[2].Items[6].Selected   false
[2].Items[7].RightId    8
[2].Items[7].RoleName   Medewerkers
[2].Items[7].Selected   false
[2].Items[8].RightId    9
[2].Items[8].RoleName   Medewerkers
[2].Items[8].Selected   false
[2].Items[9].RightId    10
[2].Items[9].RoleName   Medewerkers
[2].Items[9].Selected   false
Was it helpful?

Solution

Some sample code patched together. First the controller method:

public ActionResult ProcessModel()
{
    ViewRolePermissionsModel newResponse = ProcessRoles(Request.Form);
}

and then the method to parse this into the model

private ViewRolePermissionsModel ProcessRoles(System.Collections.Specialized.NameValueCollection requestForm)
{
    ViewRolePermissionsModel viewRolePermissionsModel = new ViewRolePermissionsModel();

    String[] allKeys = requestForm.AllKeys;

    foreach (String localKey in allKeys)
    {
        itemValue = requestForm.GetValues(localKey).FirstOrDefault();
        //  depending on the localKey either use this to add the value to the model or to build a list to be added later
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top