I am working on this website and I'm having difficulties on setting a true or false from my check box to the database to set my IsActive
value to true or false to update an account am using code first approach on MVC.
on my Account and identity models
public class RegisterViewModel { public bool IsActive { get; set; } }
and on my account controller
//
// GET: /Account/Update
[HttpGet]
[ETAuthorizeAttribute]
public ActionResult Update(string email)
{
var user = _db.Users.FirstOrDefault(x => x.Email == email);
ViewBag.IsActive = user.IsActive;
ViewBag.CostCentres = new SelectList(_db.CostCentres.Select(x => x.Station).Distinct());
ViewBag.Hotel = new SelectList(_db.Hotels.Where(x => x.IsBlocked == true).Distinct(), "HotelId", "HotelName");
string selected = "";
foreach (var item in user.Roles)
selected += item.RoleId + ",";
ViewBag.Selected = selected;
ViewBag.Roles = _db.Roles.ToList();
RegisterViewModel model = new RegisterViewModel();
model.Email = user.Email;
return View(model);
}
//
// POST: /Account/Register
[HttpPost]
[ETAuthorizeAttribute]
[ValidateAntiForgeryToken]
public ActionResult Update(RegisterViewModel model)
{
bool isActive = Convert.ToBoolean(Request.Form["active"]);
string role = Request.Form["role"];
if (role != null)
{
ApplicationUser user = _db.Users.FirstOrDefault(x => x.Email == model.Email);
if (user != null)
{
user.HotelId = model.HotelId;
user.Station = model.Station;
user.FullName = model.FullName;
user.IsActive = isActive;
try {
_db.Entry(user).State = EntityState.Modified;
_db.SaveChanges();
}
// return RedirectToAction("Index");
catch(Exception e)
{
_db.ClearUserRoles(UserManager, user.Id);
string[] roles = role.Split(',');
foreach (var item in roles)
{
string name = _db.Roles.FirstOrDefault(x => x.Id == item).Name;
_db.AddUserToRole(UserManager, user.Id, name);
}
return RedirectToAction("Index", "Account");
}
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
and on my view ...
<div class="form-group">
@Html.Label("IsActive", new { @class = "control-labelcol-md-2" })
<div class="col-md-10">
<div class="checkbox col-md-3">
@if (ViewBag.IsActive)
{
<input type="checkbox" name="active" value="@ViewBag.IsActive" checked/>}
else
{
<input type="checkbox" name="active" value="@ViewBag.IsActive" /> }
</div>
</div>
</div>