У меня есть два действия. Один создает запись в моей таблице и сохраняет изменения в базе данных, а затем действие, которое отправляет эту запись по электронной почте.
Мне кажется, проблема в том, что действия выполняются одновременно, поэтому действие электронной почты не может получить требуемые данные, так как оно еще не было создано, поэтому оно захватывает предыдущую запись.
Я использую onclick для двух действий, поэтому это одна и та же кнопка.
Вид:
div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-warning" onclick="SendEmail()" />
</div>
</div>
</div>
}
var SendEmail = function () {
$.ajax({
type: "Post",
url: "/HolidayRequestForms/SendMailToManager",
success: function (data) {
alert("Success");
}
})
}
Действия контроллера:
Создать:
public ActionResult Create()
{
ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FullName");
return View();
}
// POST: HolidayRequestForms/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "RequestID,EmployeeID,StartDate,FinishDate,HoursTaken,Comments,YearCreated,MonthCreated,DayCreated,YearOfHoliday,Approved")] HolidayRequestForm holidayRequestForm)
{
if (ModelState.IsValid)
{
db.HolidayRequestForms.Add(holidayRequestForm);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FullName", holidayRequestForm.EmployeeID);
return View(holidayRequestForm);
}
Электронная почта:
public JsonResult SendMailToManager()
{
string name = Session["Name"].ToString();
var AreaManagerEmailCatch = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.AreaManagerEmail);
var ManagerEmailCatch = db.Employees.Where(s => s.Email.Equals(name)).Select(s => s.ManagerEmail);
var StartDateCatch = db.HolidayRequestForms.Where(s => s.Employee.Email.Equals(name)).Select(s => s.StartDate);
var des = (from a in db.Employees
where a.Email == name
select a.AreaManagerEmail);
var ManEmail = (from b in db.Employees
where b.Email == name
select b.ManagerEmail);
var SD = (from c in db.HolidayRequestForms.OrderByDescending(c => c.RequestID)
where (c.Employee.Email == name) && (c.Employee.EmployeeID == c.EmployeeID)
select c.StartDate);
DateTime StartDate = SD.FirstOrDefault();
string ManagerEmail = ManEmail.FirstOrDefault();
string AreaManagerEmail = des.FirstOrDefault();
bool result = false;
result = SendEmail(AreaManagerEmail, "LotusWorks Holiday Request", "Hi there " + AreaManagerEmail + ",<br><br>[EmployeeEmail] has requested a holiday<br><br>The Employee will not be available to work From: <b>" + StartDate + "</b> to <b>[FinishDate]</b>.<br><br>Please forward this email to " + ManagerEmail + " with a response of Accept or Reject<br><br><br>Kind Regards,<br><br>LotusWorks Holiday Tracker");
return Json(result, JsonRequestBehavior.AllowGet);
Можно ли сначала использовать действие создания, затем действие электронной почты, чтобы в письме была отправлена нужная запись.