我有两个动作。一个会在我的表中创建一条记录,然后将更改保存到数据库中,然后执行一项操作,以电子邮件形式发送该记录。
我认为问题在于这些操作是同时执行的,因此电子邮件操作无法捕获所需的数据,因为尚未创建该数据,因此它正在捕获先前的记录。
我对这两个操作使用了onclick,因此它是同一按钮。
查看:
SELECT l.loan_id, COUNT(cm.loan_id) contact_count
FROM
loans l
LEFT JOIN contact_made cm
ON l.loan_id = cm.loan_id
AND cm.status_loan_id IN (33, 34)
GROUP BY loan_id
ORDER BY 2, 1;
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);
}
有没有一种方法,我可以先使用create动作,然后再使用email动作,以便所需的记录将通过电子邮件发送。
答案 0 :(得分:1)
有没有一种方法,我可以先使用create动作,然后再使用email动作,以便所需的记录将通过电子邮件发送。
肯定有!您可以简单地执行以下操作:
根据需要,首先从onclick="SendEmail()"
按钮中删除submit
,
<input type="submit" value="Create" class="btn btn-warning"/>
然后在控制器的Create
POST方法中:
[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();
SendMailToManager(); // Call the SendMailToManager() method here. It will only be called if `holidayRequestForm` created successfully.
return RedirectToAction("Index");
}
ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FullName", holidayRequestForm.EmployeeID);
return View(holidayRequestForm);
}
现在按如下所示更新SendMailToManager()
:
private void 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();
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");
}
答案 1 :(得分:0)
我没有发送电子邮件的操作。相反,我将使Email方法只是业务类中的常规方法,并在创建记录时调用它。
if (ModelState.IsValid)
{
db.HolidayRequestForms.Add(holidayRequestForm);
int changes = db.SaveChanges();
if(changes > 0){SendEmail();}
return RedirectToAction("Index");
}