Now
we had complicated Simple page and simple authorization now move ahead to
create page of EDIT, DELETE, READ, UPDATE by using partial view and JQuery and
Ajax.
Add
code in properties
public class UserDetailView
{
[Key]
public int UserID {
get; set; }
public int RoleID {
get; set; }
public string RoleName
{ get; set; }
public bool?
IsActive { get; set; }
[Required(ErrorMessage = "*")]
[Display(Name = "User Name")]
public string UserName
{ get; set; }
[Required(ErrorMessage = "*")]
[Display(Name = "Password")]
public string Password
{ get; set; }
[Required(ErrorMessage = "*")]
[Display(Name = "First Name")]
public string
FirstName { get; set; }
[Required(ErrorMessage = "*")]
[Display(Name = "Last Name")]
public string LastName
{ get; set; }
public string Gender {
get; set; }
}
public class UserRoleDetailView
{
[Key]
public int RoleID {
get; set; }
public string RoleName
{ get; set; }
public string
Description { get; set; }
}
public class Gender
{
public string Text { get; set; }
public string Value { get; set; }
}
public class UserRoles
{
public int?
SelectedRoleID { get; set; }
public IEnumerable<UserRoleDetailView> userRoleDetails{ get; set; }
}
public class UserGender
{
public string
SelectedGender { get; set; }
public IEnumerable<Gender> Gender { get; set; }
}
public class UserDataView
{
public IEnumerable<UserDetailView> userDetailViews { get; set; }
public UserRoles UserRoles { get; set; }
public UserGender UserGender { get; set; }
}
Now
add code in Method
public List<UserRoleDetailView> GetAllRoles()
{
using (StoreDBContext db = new StoreDBContext ())
{
var roles = db.UserRoles.Select(m =>
new UserRoleDetailView
{
RoleID = m.RoleID,
RoleName = m.RoleName,
Description = m.Description
}).ToList();
return roles;
}
}
public int GetUserID(string UserName)
{
using (StoreDBContext db = new StoreDBContext ())
{
return db.UsersLogins.Where(m =>
m.Username.Equals(UserName
)).SingleOrDefault().Id ;
}
}
public List<UserDetailView> GetAllUserProfiles()
{
List<UserDetailView>
userDetailViews = new
List<UserDetailView>();
using (StoreDBContext db = new StoreDBContext ())
{
UserDetailView userDetailViews1
;
var users = db.UsersLogins.ToList();
foreach (UsersLogin userlogin in db.UsersLogins)
{
userDetailViews1 = new UserDetailView();
userDetailViews1.UserID =
userlogin.Id;
userDetailViews1.UserName =
userlogin.Username;
userDetailViews1.Password =
userlogin.Password;
var Udetail =
db.UserDetails.Find(userlogin.Id);
if (Udetail != null)
{
userDetailViews1.FirstName = Udetail.FirstName;
userDetailViews1.LastName = Udetail.LastName;
userDetailViews1.Gender
= Udetail.Gendar;
}
var URoles = db.UserRoles.Where(m =>
m.UserID.Equals(userlogin.Id));
Boolean Iactive = true ; // For active we code latter
if (URoles.Any())
{
var userRole = URoles.FirstOrDefault();
userDetailViews1.RoleID
= userRole.RoleID;
userDetailViews1.RoleName = userRole.RoleName ;
userDetailViews1.IsActive
= Iactive;
}
userDetailViews.Add(userDetailViews1);
}
}
return userDetailViews;
}
public UserDataView GetUserDataView(string loginName)
{
UserDataView userDataView = new UserDataView();
List<UserDetailView>
userDetailViews = GetAllUserProfiles();
List<UserRoleDetailView >
roles = GetAllRoles();
int? userAssignedRoleID = 0, userID = 0;
string userGender = string.Empty;
userID = GetUserID(loginName);
using (StoreDBContext db = new StoreDBContext())
{
userAssignedRoleID =
db.UserRoles.Where(m =>
m.UserID ==
userID)?.FirstOrDefault().RoleID;
userGender =
db.UserDetails.Where(m =>
m.UserID ==
userID)?.FirstOrDefault().Gendar;
}
List<Gender> genders = new List<Gender>();
genders.Add(new Gender { Text = "Male", Value = "M" });
genders.Add(new Gender { Text = "Female", Value = "F" });
userDataView.userDetailViews = userDetailViews;
userDataView.UserRoles = new UserRoles
{
SelectedRoleID =
userAssignedRoleID,
userRoleDetails = roles
};
userDataView.UserGender = new UserGender
{
SelectedGender = userGender,
Gender = genders
};
return userDataView;
}
public void
UpdateUserAccount(UserDetailView userDetailView)
{
using (StoreDBContext db = new StoreDBContext())
{
using (var
dbContextTransaction = db.Database.BeginTransaction())
{
try
{
UsersLogin
usersLogin =
db.UsersLogins.Find(userDetailView.UserID);
userDetailView.UserName
= userDetailView.UserName;
userDetailView.Password
= userDetailView.Password;
db.SaveChanges();
var userProfile =
db.UserDetails.Where(m =>
m.UserID ==
userDetailView.UserID);
if (userProfile.Any())
{
UserDetail
userDetail =
userProfile.FirstOrDefault();
userDetail.UserID =
userDetailView.UserID;
userDetail.FirstName =
userDetailView.FirstName;
userDetail.LastName
= userDetailView.LastName;
userDetail.Gendar =
userDetailView.Gender;
db.SaveChanges();
}
if (userDetailView.RoleID > 0)
{
var userRole = db.UserRoles.Where(m
=>
m.UserID ==
userDetailView.UserID);
UserRole userRoles
= null;
if (userRole.Any())
{
userRoles=
userRole.FirstOrDefault();
userRoles.RoleID = userDetailView.RoleID;
userRoles.UserID = userDetailView.UserID;
}
else
{
userRoles = new UserRole();
userRoles.RoleID = userDetailView.RoleID;
userRoles.UserID = userDetailView.UserID;
db.UserRoles.Add(userRoles);
}
db.SaveChanges();
}
dbContextTransaction.Commit();
}
catch
{
dbContextTransaction.Rollback();
}
}
}
}
public void
DeleteUser(int userID)
{
using (StoreDBContext db = new StoreDBContext ())
{
using (var
Transaction = db.Database.BeginTransaction())
{
try
{
var
uRol=
db.UserRoles.Where(m => m.UserID == userID);
if (uRol.Any())
{
db.UserRoles.Remove(uRol.FirstOrDefault());
db.SaveChanges();
}
var uDetails = db.UserDetails.Where(m
=> m.UserID == userID);
if (uDetails.Any())
{
db.UserDetails.Remove(uDetails.FirstOrDefault());
db.SaveChanges();
}
var Ulogin = db.UsersLogins.Where(m
=> m.Id == userID);
if (Ulogin.Any())
{
db.UsersLogins.Remove(Ulogin.FirstOrDefault());
db.SaveChanges();
}
Transaction.Commit();
}
catch { Transaction.Rollback(); }
}
}
}
public UserDetailView GetUserProfile(int userID)
{
UserDetailView userDetailView = new UserDetailView ();
using (StoreDBContext db = new StoreDBContext())
{
var user = db.UsersLogins.Find(userID);
if (user != null)
{
userDetailView.UserID =
user.Id;
userDetailView.UserName =
user.Username;
userDetailView.Password =
user.Password;
var UDetail =
db.UserDetails.Find(userID);
if (UDetail != null)
{
userDetailView.FirstName = UDetail.FirstName;
userDetailView.LastName
= UDetail.LastName;
userDetailView.Gender =
UDetail.Gendar;
}
var Urol = db.UserRoles.Find(userID);
if (Urol != null)
{
userDetailView.RoleID =
Urol.RoleID;
userDetailView.RoleName
= Urol.RoleName;
}
}
}
return userDetailView;
}
Now
Add in Controller
[Authorization("Admin")]
public ActionResult ManageUserPartial(string status = "")
{
if (User.Identity.IsAuthenticated)
{
string UserName = User.Identity.Name;
MethodManager
methodManager = new MethodManager ();
UserDataView userDataView = methodManager.GetUserDataView(UserName);
string message = string.Empty;
if (status.Equals("update"))
message = "Update Successful";
else if
(status.Equals("delete"))
message = "Delete Successful";
ViewBag.Message = message;
return PartialView(userDataView );
}
return RedirectToAction("Index", "Home");
}
[Authorization("Admin")]
public ActionResult UpdateUserData(int userID, string
UserName, string password, string firstName, string lastName, string gender, int roleID = 0)
{
UserDetailView userDetailView = new UserDetailView ();
userDetailView.UserID = userID;
userDetailView.UserName = UserName;
userDetailView.Password = password;
userDetailView.FirstName =
firstName;
userDetailView.LastName = lastName;
userDetailView.Gender = gender;
if (roleID > 0)
userDetailView.RoleID = roleID;
MethodManager methodManager = new MethodManager();
methodManager.UpdateUserAccount(userDetailView);
return Json(new {
success = true });
}
[Authorization("Admin")]
public ActionResult DeleteUser(int userID)
{
MethodManager methodManager = new MethodManager();
methodManager.DeleteUser(userID);
return Json(new {
success = true });
}
[Authorize]
public ActionResult EditProfile()
{
string userName = User.Identity.Name;
MethodManager methodManager = new MethodManager ();
UserDetailView userDetailView = methodManager.GetUserProfile(methodManager.GetUserID(userName));
return View(userDetailView);
}
[HttpPost]
[Authorize]
public ActionResult EditProfile(UserDetailView userDetailView )
{
if (ModelState.IsValid)
{
MethodManager
methodManager = new MethodManager ();
methodManager.UpdateUserAccount(userDetailView );
ViewBag.Status = "Update Sucessful!";
}
return View(userDetailView );
}
Now
add partial View for Controller ManageUserPartial
@model StoreManagementSystem.Models.PropertiesForView.UserDataView
<span class="alert-success">@ViewBag.Message</span>
<div>
<h1>List of
Users</h1>
<span class="alert-success">
@ViewBag.Message
</span>
<table class="table table-striped table-condensed table-hover">
<thead>
<tr>
<th>ID</th>
<th>User Name</th>
<th>Password</th>
<th>First
Name</th>
<th>Last Name</th>
<th>Gender</th>
<th colspan="2">Role</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var m in
Model.userDetailViews)
{
<tr>
<td>@Html.DisplayFor(b => m.UserID)</td>
<td>@Html.DisplayFor(b => m.UserName)</td>
<td> @Html.DisplayFor(b
=> m.Password)</td>
<td> @Html.DisplayFor(b =>
m.FirstName)</td>
<td> @Html.DisplayFor(b
=> m.LastName)</td>
<td> @Html.DisplayFor(b
=> m.Gender)</td>
<td> @Html.DisplayFor(b
=> m.RoleName)</td>
<td> @Html.HiddenFor(b
=> m.RoleID)</td>
<td><a href="javacript:void(0)" class="lnkEdit">Edit</a></td>
<td><a href="javacript:void(0)" class="lnkDelete">Delete</a></td>
</tr>}
</tbody>
</table>
</div>
@* Edit View
Partial*@
<div id="divEdit" style="display:none">
<input type="hidden" id="hidID" />
<table>
<tr>
<td>User Name</td>
<td><input type="text" id="txtUserName" class="form-control" /></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" id="txtPassword" class="form-control" /></td>
</tr>
<tr>
<td>First
Name</td>
<td><input type="text" id="txtFirstName" class="form-control" /></td>
</tr>
<tr>
<td>Last Name</td>
<td><input type="text" id="txtLastName" class="form-control" /></td>
</tr>
<tr>
<td>Gender</td>
<td>
@Html.DropDownListFor(m =>
m.UserGender.SelectedGender,
new SelectList(Model.UserGender.Gender, "Value", "Text"), "",
new { id = "ddlGender", @class = "form-control" })
</td>
</tr>
<tr>
<td>Role</td>
<td>
@Html.DropDownListFor(m =>
m.UserRoles.SelectedRoleID,
new SelectList(Model.UserRoles.userRoleDetails, "RoleID", "RoleName"), "", new { id = "ddlRoles", @class="form-control" })
</td>
</tr>
</table>
</div>
<span class="alert-success">@ViewBag.Message</span>
<script type="text/javascript">
$(function () {
var initDialog = function (type)
{
var title = type;
$("#divEdit").dialog({
autoOpen: false,
modal: true,
title: type + ' User',
width: 360,
buttons: {
Save: function () {
var id = $("#hidID").val();
var role = $("#ddlRoles").val();
var loginName = $("#txtUserName").val();
var loginPass = $("#txtPassword").val();
var fName = $("#txtFirstName").val();
var lName = $("#txtLastName").val();
var gender = $("#ddlGender").val();
UpdateUser(id,
loginName, loginPass, fName, lName, gender, role);
$(this).dialog("destroy");
},
Cancel: function () { $(this).dialog("destroy"); }
}
});
}
function UpdateUser(id, logName, logPass, fName, lName, gender, role) {
$.ajax({
type: "POST",
url: "@(Url.Action("UpdateUserData","Home"))",
data: {
userID: id, loginName: logName,
password: logPass, firstName:
fName, lastName:
lName, gender: gender, roleID: role
},
success: function (data) {
$("#divUserListContainer").load("@(Url.Action("ManageUserPartial","Home", new { status
="update" }))");
},
error: function (error) {
//to do:
}
});
}
$("a.lnkEdit").on("click", function () {
initDialog("Edit");
$(".alert-success").empty();
row = $(this).closest('tr');
$("#hidID").val(row.find("td:eq(0)").html().trim());
$("#txtUserName").val(row.find("td:eq(1)").html().trim())
$("#txtPassword").val(row.find("td:eq(2)").html().trim())
$("#txtFirstName").val(row.find("td:eq(3)").html().trim())
$("#txtLastName").val(row.find("td:eq(4)").html().trim())
$("#ddlGender").val(row.find("td:eq(5)").html().trim())
$("#ddlRoles").val(row.find("td:eq(7) >
input").val().trim());
$("#divEdit").dialog("open");
return false;
});
});
function DeleteUser(id) {
$.ajax({
type: "POST",
url: "@(Url.Action("DeleteUser","Home"))",
data: { userID: id },
success: function (data) {
$("#divUserListContainer").load("@(Url.Action("ManageUserPartial","Home",
new { status ="delete" }))");
}, error: function (error) { }
});
}
$("a.lnkDelete").on("click", function () {
var row = $(this).closest('tr');
var id = row.find("td:eq(0)").html().trim();
var answer = confirm("You are about to
delete this user with ID "
+ id + " . Continue?");
if (answer)
DeleteUser(id);
return false;
});
</script>
No comments:
Post a Comment