ASP.NET MVC调用顺序如何?

时间:2019-01-27 01:56:21

标签: asp.net-mvc

我有两个动作。一个会在我的表中创建一条记录,然后将更改保存到数据库中,然后执行一项操作,以电子邮件形式发送该记录。

我认为问题在于这些操作是同时执行的,因此电子邮件操作无法捕获所需的数据,因为尚未创建该数据,因此它正在捕获先前的记录。

我对这两个操作使用了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动作,以便所需的记录将通过电子邮件发送。

2 个答案:

答案 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");
}