leilast
سه شنبه 28 آذر 1396, 13:17 عصر
سلام.
من برای آپدبت اطلاعات چند جدول از ویو مدل زیر استفاده کردم:
public class UserManagementViewModel
{
public EmployeePosition EmployeePositions { get; set; }
public Employee Employees { get; set; }
public UsersInfo UserInfos { get; set; }
public Department Departments { get; set; }
}
اولین قدم نمایش اطلاعات بر اساس ای دی انتخاب شده توسط متدget هست.
نمایش اطلاعات درست انجام میشه. (از join استفاده کردم)
کد کنترلر برای متد get
[HttpGet]
public ActionResult UpdateUsers(int id)
{
var db = new ParsDataEntities();
var ViewModel = (from EP in db.EmployeePositions
join Dep in db.Departments on EP.DepID equals Dep.DepID
join E in db.Employees on EP.EmpID equals E.EmpID
join UI in db.UsersInfos on EP.EmpID equals UI.Usr_EmpID
where EP.DepID == Dep.DepID && EP.EmpID == E.EmpID && EP.EmpID == UI.Usr_EmpID
select new UserManagementViewModel
{
EmployeePositions = EP,
Departments = Dep,
Employees = E,
UserInfos = UI,
}).AsEnumerable();
var user = ViewModel.FirstOrDefault(p => p.Employees.EmpID == id);
return View(user);
}
بعد از اون متدpost باید اطلاعاتی که ویرایش میشه رو اپدیت کنه.
اما این متد با مشکل مواجه هست.
بعد از سابمیت فرم بریک پوینت اصلا وارد متد post نمیشه و هیچ خطایی هم نمیده(ادرس دهی هم درسته)
فکر میکنم ارتباط بین get و post درست انجام نمیشه.
این کد کنترلر هست:
(کد بنظر طولانی میاد اما بیشترش انتساب مقادیر جدید هست و چیز پیچیده ای نداره)
[HttpPost]
[AjaxOnly]
public ActionResult UpdateUsers(UserManagementViewModel model)
{
var db = new ParsDataEntities();
if (ModelState.IsValid)
{
try
{
var ExistingEmployee = db.Employees.FirstOrDefault(s => s.EmpID == model.Employees.EmpID);
//ExistingEmployee.EmpID = user.Employees.EmpID;
ExistingEmployee.EmpPCode = model.Employees.EmpPCode;
ExistingEmployee.EmpFirstName = model.Employees.EmpFirstName;
ExistingEmployee.EmpLastName = model.Employees.EmpLastName;
ExistingEmployee.EmpNationalID = model.Employees.EmpNationalID;
ExistingEmployee.EmpEmail = model.Employees.EmpEmail;
ExistingEmployee.EmpAddress = model.Employees.EmpAddress;
ExistingEmployee.EmpMobile = model.Employees.EmpMobile;
ExistingEmployee.EmpPhone = model.Employees.EmpPhone;
db.Entry(VM.Employees).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
var ExistingEmployeePosition = db.EmployeePositions.FirstOrDefault(s => s.EmpID == model.Employees.EmpID);
//EmpID = model.EmployeePositions.EmpID,
ExistingEmployeePosition.EmpID = model.Employees.EmpID;
ExistingEmployeePosition.EmpPosID = model.EmployeePositions.EmpPosID;
ExistingEmployeePosition.DepID = model.EmployeePositions.DepID;
db.Entry(VM.EmployeePositions).State = System.Data.Entity.EntityState.Modified;
//EmpID_Creator=model.EmployeePositions.EmpID_Creato r
db.SaveChanges();
var ExistingUserInfo = db.UsersInfos.FirstOrDefault(s => s.Usr_EmpID == model.Employees.EmpID);
//Usr_EmpID = model.UserInfos.Usr_EmpID,
ExistingUserInfo.Usr_EmpID = model.Employees.EmpID;
ExistingUserInfo.Usr_UserName = model.UserInfos.Usr_UserName;
ExistingUserInfo.Usr_Password = model.UserInfos.Usr_Password;
ExistingUserInfo.Usr_Activation = model.UserInfos.Usr_Activation;
//Usr_CreateDate = DateTime.UtcNow
//Usr_FailedLoginCount = model.UserInfos.Usr_FailedLoginCount,
//Usr_LastLoginDate = model.UserInfos.Usr_LastLoginDate,
ExistingUserInfo.Usr_LastPassChanged = DateTime.UtcNow;
db.Entry(VM.UserInfos).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type "{0}" in state "{1}" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: "{0}", Error: "{1}"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
return MessageBox.Show("ویرایش انجام شد", MessageType.Success);
}
else
{
return MessageBox.Show(ModelState.GetErrors(), MessageType.Error);
}
}
اگر ممکنه بررسی بفرمایید که مشکل از کجاست؟
مدلی هم که به ویو ارسال میکنم همون ویومدل اول هست.
من برای آپدبت اطلاعات چند جدول از ویو مدل زیر استفاده کردم:
public class UserManagementViewModel
{
public EmployeePosition EmployeePositions { get; set; }
public Employee Employees { get; set; }
public UsersInfo UserInfos { get; set; }
public Department Departments { get; set; }
}
اولین قدم نمایش اطلاعات بر اساس ای دی انتخاب شده توسط متدget هست.
نمایش اطلاعات درست انجام میشه. (از join استفاده کردم)
کد کنترلر برای متد get
[HttpGet]
public ActionResult UpdateUsers(int id)
{
var db = new ParsDataEntities();
var ViewModel = (from EP in db.EmployeePositions
join Dep in db.Departments on EP.DepID equals Dep.DepID
join E in db.Employees on EP.EmpID equals E.EmpID
join UI in db.UsersInfos on EP.EmpID equals UI.Usr_EmpID
where EP.DepID == Dep.DepID && EP.EmpID == E.EmpID && EP.EmpID == UI.Usr_EmpID
select new UserManagementViewModel
{
EmployeePositions = EP,
Departments = Dep,
Employees = E,
UserInfos = UI,
}).AsEnumerable();
var user = ViewModel.FirstOrDefault(p => p.Employees.EmpID == id);
return View(user);
}
بعد از اون متدpost باید اطلاعاتی که ویرایش میشه رو اپدیت کنه.
اما این متد با مشکل مواجه هست.
بعد از سابمیت فرم بریک پوینت اصلا وارد متد post نمیشه و هیچ خطایی هم نمیده(ادرس دهی هم درسته)
فکر میکنم ارتباط بین get و post درست انجام نمیشه.
این کد کنترلر هست:
(کد بنظر طولانی میاد اما بیشترش انتساب مقادیر جدید هست و چیز پیچیده ای نداره)
[HttpPost]
[AjaxOnly]
public ActionResult UpdateUsers(UserManagementViewModel model)
{
var db = new ParsDataEntities();
if (ModelState.IsValid)
{
try
{
var ExistingEmployee = db.Employees.FirstOrDefault(s => s.EmpID == model.Employees.EmpID);
//ExistingEmployee.EmpID = user.Employees.EmpID;
ExistingEmployee.EmpPCode = model.Employees.EmpPCode;
ExistingEmployee.EmpFirstName = model.Employees.EmpFirstName;
ExistingEmployee.EmpLastName = model.Employees.EmpLastName;
ExistingEmployee.EmpNationalID = model.Employees.EmpNationalID;
ExistingEmployee.EmpEmail = model.Employees.EmpEmail;
ExistingEmployee.EmpAddress = model.Employees.EmpAddress;
ExistingEmployee.EmpMobile = model.Employees.EmpMobile;
ExistingEmployee.EmpPhone = model.Employees.EmpPhone;
db.Entry(VM.Employees).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
var ExistingEmployeePosition = db.EmployeePositions.FirstOrDefault(s => s.EmpID == model.Employees.EmpID);
//EmpID = model.EmployeePositions.EmpID,
ExistingEmployeePosition.EmpID = model.Employees.EmpID;
ExistingEmployeePosition.EmpPosID = model.EmployeePositions.EmpPosID;
ExistingEmployeePosition.DepID = model.EmployeePositions.DepID;
db.Entry(VM.EmployeePositions).State = System.Data.Entity.EntityState.Modified;
//EmpID_Creator=model.EmployeePositions.EmpID_Creato r
db.SaveChanges();
var ExistingUserInfo = db.UsersInfos.FirstOrDefault(s => s.Usr_EmpID == model.Employees.EmpID);
//Usr_EmpID = model.UserInfos.Usr_EmpID,
ExistingUserInfo.Usr_EmpID = model.Employees.EmpID;
ExistingUserInfo.Usr_UserName = model.UserInfos.Usr_UserName;
ExistingUserInfo.Usr_Password = model.UserInfos.Usr_Password;
ExistingUserInfo.Usr_Activation = model.UserInfos.Usr_Activation;
//Usr_CreateDate = DateTime.UtcNow
//Usr_FailedLoginCount = model.UserInfos.Usr_FailedLoginCount,
//Usr_LastLoginDate = model.UserInfos.Usr_LastLoginDate,
ExistingUserInfo.Usr_LastPassChanged = DateTime.UtcNow;
db.Entry(VM.UserInfos).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type "{0}" in state "{1}" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: "{0}", Error: "{1}"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
return MessageBox.Show("ویرایش انجام شد", MessageType.Success);
}
else
{
return MessageBox.Show(ModelState.GetErrors(), MessageType.Error);
}
}
اگر ممکنه بررسی بفرمایید که مشکل از کجاست؟
مدلی هم که به ویو ارسال میکنم همون ویومدل اول هست.