I'm using ASP.NET MVC 4 and I built these ViewModels :
public class NotificationViewModel
{
public string GroupDesc { get; set; }
public bool AM { get; set; }
public bool PM { get; set; }
public int MaxNotif { get; set; }
}
public class SettingsViewModel
{
public List<NotificationViewModel> ListNotification { get; set; }
public SettingsViewModel()
{
ListNotification = new List<NotificationViewModel>();
}
}
My View :
@model PortailT2A.Models.SettingsViewModel
@{
ViewBag.Title = "Preferences";
Layout = "~/Views/Shared/_LayoutAdmin.cshtml";
}
<h2>Preferences</h2>
@using(Html.BeginForm("Preferences", "Administrateur", FormMethod.Post))
{
<table id="settingsTable">
<tr>
<th>Groupe</th>
<th></th>
<th>AM</th>
<th>PM</th>
<th>Limite de notifications</th>
</tr>
@for (int i = 0; i < Model.ListNotification.Count(); i++ )
{
var notif = Model.ListNotification[i];
<tr>
<td>@notif.GroupDesc </td>
<td>Heure de notification</td>
<td>@Html.CheckBoxFor(u => notif.AM) </td>
<td>@Html.CheckBoxFor(u => notif.PM) </td>
<td>@Html.TextBoxFor(u => notif.MaxNotif)</td>
</tr>
<tr/>
}
</table>
<input type ="submit" value="Sauvegarder" />
}
My HttpGet method populates my ViewModel and returns it.
[HttpGet]
public ActionResult Preferences(long idUser)
{
context = new MainDatabaseEntities();
List<NotificationViewModel> notifications = new List<NotificationViewModel>();
SettingsViewModel settings = new SettingsViewModel();
//Population...
return View(settings);
}
However, when I want to save the changes, I got a ViewModel which is null and I don't understand why. Any idea guys?
EDIT : My post method :
[HttpPost]
public ActionResult Preferences(SettingsViewModel sm)
{
//since here my ViewModel is null
context = new MainDatabaseEntities();
Utilisateur user = (from u in context.Utilisateurs where u.Username == User.Identity.Name select u).FirstOrDefault();
//operations...
}
HTML generated :
<tr>
<td>Groupe B </td>
<td>Heure de notification</td>
<td><input id="notif_AM" name="notif.AM" type="checkbox" value="true" /><input name="notif.AM" type="hidden" value="false" /> </td>
<td><input checked="checked" id="notif_PM" name="notif.PM" type="checkbox" value="true" /><input name="notif.PM" type="hidden" value="false" /> </td>
<td><input id="notif_MaxNotif" name="notif.MaxNotif" type="text" value="10" /></td>
</tr>
ListNotificaton[0].AM
. [the shortcut you're using in yourfor
is most likely the culprit, but can't be sure without the generated HTML] – Gutty