Модель возвращает нулевые значения
привет,
таким образом, моя функция Get работает нормально, и я ищу пользователя и получаю его доступ к вещам в списке флажков. проблема в том, что когда я выбираю другой флажок и нажимаю кнопку сохранить модель, переданную в функцию post с идентификатором поиска, это нули. Не знаю почему. разве модель, переданная из представления, не должна содержать значения?
мой контроллер:
public ActionResult Index(int? SearchId) { var MainVM = new MainViewModel(); var usr_Dep = db.TBL_User_Dep_Access.Where(x => x.UserID == SearchId).Select(x => x.Dep_ID).ToList(); var usr_Per = db.TBL_UserPermissions.Where(x => x.UserID == SearchId).Select(x => x.PermissionID).ToList(); if (SearchId != null) { List<UserDepartmentViewModel> Udep = db.TBL_Department.Select(i => new UserDepartmentViewModel { DepId = i.Department_ID, DepName = i.Department_Name, IsChecked = usr_Dep.Contains(i.Department_ID) }).ToList(); List<UserPermissionViewModel> Uper = db.TBL_Permissions.Select(i => new UserPermissionViewModel { PerId = i.PermissionID, PerName = i.PermissionName, IsChecked_ = usr_Per.Contains(i.PermissionID) }).ToList(); MainVM.UserDepartments = Udep; MainVM.UserPermissions = Uper; } return View(MainVM); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult SaveData (MainViewModel mainView , int? SearchId) { db.TBL_UserPermissions.RemoveRange(db.TBL_UserPermissions.Where(x => x.UserID == SearchId)); db.TBL_User_Dep_Access.RemoveRange(db.TBL_User_Dep_Access.Where(x => x.UserID == SearchId)); foreach (var dep in mainView.UserDepartments) { if (dep.IsChecked) { TBL_User_Dep_Access tBL_User_Dep_ = new TBL_User_Dep_Access(); tBL_User_Dep_.UserID = SearchId; tBL_User_Dep_.Dep_ID = dep.DepId; tBL_User_Dep_.IsActive = true; db.TBL_User_Dep_Access.Add(tBL_User_Dep_); } } db.SaveChanges(); foreach (var per in mainView.UserPermissions) { if (per.IsChecked_) { TBL_UserPermissions tBL_UserPermissions = new TBL_UserPermissions(); tBL_UserPermissions.UserID = SearchId; tBL_UserPermissions.PermissionID = per.PerId; tBL_UserPermissions.IsActive = true; db.TBL_UserPermissions.Add(tBL_UserPermissions); } } db.SaveChanges(); return View(); }
мой взгляд :
@using (Html.BeginForm("Index", "Access")) { @Html.AntiForgeryToken() @Html.TextBox("SearchId", "", new { @id = "SearchId", @placeholder = "Search for...", @class = "form-control" }) <span class="input-group-btn"> <input class="btn btn-default" value="Search" type="submit">Go! /> </span> } @using (Html.BeginForm("SaveData", "Access")) { @Html.AntiForgeryToken() <ul> @if (Model.UserDepartments != null) { foreach (var item in Model.UserDepartments) { <li> <p> @Html.CheckBoxFor(modelItem => item.IsChecked) @Html.DisplayFor(modelItem => item.DepName) @Html.HiddenFor(modelItem => item.DepId) </p> </li> } } </ul> <ul> @if (Model.UserPermissions != null) { foreach (var item in Model.UserPermissions) { <li> <p> @Html.CheckBoxFor(modelItem => item.IsChecked_) @Html.DisplayFor(modelItem => item.PerName) @Html.HiddenFor(modelItem => item.PerId) </p> </li> } } </ul> <input type="submit" value="Save" class="btn btn-default" onclick="onClick" /> }
моя модель представления:
public class MainViewModel { public int SearchId { get; set; } public List<UserPermissionViewModel> UserPermissions { get; set; } public List<UserDepartmentViewModel> UserDepartments { get; set; } } public class UserDepartmentViewModel { public int DepId { get; set; } public string DepName { get; set; } public bool IsChecked { get; set; } } public class UserPermissionViewModel { public int PerId { get; set; } public string PerName { get; set; } public bool IsChecked_ { get; set; } }
Что я уже пробовал:
Я не могу приложить свою руку к этому вопросу здесь. так что я не знаю, где повторить, чтобы попробовать это.