0

I have a viewmodel that looks like this:

public class SecurityProfileViewModel
{
    public string SecurityProfileNum { get; set; }
    public List<String> SecurityProfilePDRGroups { get; set; }
    public List<WrReportConfiguration> SecurityProfilePDR { get; set; }
    public List<String> SecurityProfileUDRGroups { get; set; }
    public List<WrReportConfiguration> SecurityProfileUDR { get; set; }
}

The controller GET method looks like this:

    // GET: /Admin/

    public ActionResult ConfigureUserPermissions(string securityProfile)
    {
        ReportsConfigurationBuilder rcb = new ReportsConfigurationBuilder();
        rcb.BuildSecurityProfileReportConfiguration(Convert.ToInt32(securityProfile));

        SecurityProfileViewModel spvm = new SecurityProfileViewModel
        {
            SecurityProfileNum = securityProfile,
            SecurityProfilePDRGroups = rcb.SecurityProfilePDRGroupsList,
            SecurityProfilePDR = rcb.SecurityProfilePDRConfig,
            SecurityProfileUDRGroups = rcb.SecurityProfileUDRGroupsList,
            SecurityProfileUDR = rcb.SecurityProfileUDRConfig,
        };

        return View(spvm);
    }

The view produces a list of reports with associated checkboxes. The code looks like this:

@model ClearWeighWebReporting.ViewModels.SecurityProfileViewModel

@{
    ViewBag.Title = "ConfigureUserPermissions";
}

<p>Security Profile @Html.DisplayFor(modelItem => Model.SecurityProfileNum)</p>

@using (Html.BeginForm())
{
    <p>Pre-defined Reports</p>

    foreach (String pdrGroup in Model.SecurityProfilePDRGroups)
    {
        @Html.DisplayFor(modelItem => pdrGroup)

        <table>
            @foreach (ClearWeighWebReporting.Models.WrReportConfiguration pdrc in Model.SecurityProfilePDR)
            {
                if (pdrc.ReportGroup == pdrGroup)
                {
                    <tr>
                        <td>
                            @Html.HiddenFor(modelItem => pdrc.ReportID)
                            @Html.DisplayFor(modelItem => pdrc.ReportTitle)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => pdrc.ViewPermissionString)
                            @Html.CheckBoxFor(modelItem => pdrc.ViewPermission)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => pdrc.EditPermissionString)
                            @Html.CheckBoxFor(modelItem => pdrc.EditPermission)
                        </td>
                    </tr>
                }
            }
        </table>
    }

    ... other view code

    <input id="Submit1" type="submit" value="Submit" />    
}

The view is rendered ok:

image of page

But when I check/uncheck values and submit the form the view model returned to the POST method is NULL:

debugger showing NULL view model

How do I get the checkbox values back in the view model? Is this a binding issue?

Paul
  • 11
  • 1
  • Once you use a `for` loop or `EditorTemplate` to generate the correct `name` attributes (refer the dupe), your still going to have problems because your `if` block means you will have non-zero based, non-consecutive indexers (filter you collection in the server to include only what is required. And then read [What is ViewModel in MVC?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) - do not use data models in a view, especially when editing. –  Apr 04 '17 at 05:28
  • Thanks Stephen. Got my code to work by reviewing the other question you referred me to. Much appreciated. – Paul Apr 04 '17 at 07:00

0 Answers0