2016-07-21 4 views
1

Итак, вот короткий пробег: Моя система имеет двух типов пользователей: компанию и ученика. Компания отправляет задание, студент применяет (новая запись добавляется в таблицу базы данных приложения), компания выбирает приложение и предлагает работу ученику, сайт переводит его на страницу контракта, где компания может видеть как выглядит контракт и где будет проходить CPR (SSN) учащегося. Он или она заполняет CVR компании (компания SSN) и их имя и фамилия, а также клики. Это создает новую запись в таблице базы данных контракта. Все идет нормально.Попытка обновить запись базы данных, но добавлена ​​новая.

Вот класс Contract.cs модель:

namespace Leepio.Models 
{ 
    public class Contract { 
     public int ContractId { get; set; } 
     public string StudentId { get; set; } 
     public string CompanyId { get; set; } 
     public string CVR { get; set; } 
     public int ApplicationId { get; set; } 
     public bool IsSigned { get; set; } 
     public string StudentSigningDate { get; set; } 
     public string CompanySigningDate { get; set; } 
     public string RepFirstName { get; set; } 
     public string RepLastName { get; set; } 
     public virtual ApplicationUser Student { get; set; } 
     public virtual ApplicationUser Company { get; set; } 
     public virtual Application Application { get; set; } 


    } 

Все наполнено в этой точке, за исключением двух полей: поле IsSigned (следует обратиться к истинным, когда студент принимает и отправляет) и StudentSigningDate, что просто дата в виде строки дня, которую принимает студент). Теперь студент получает электронное письмо, и он или она переходит к ссылке, где они могут видеть предварительный просмотр контракта и текстовое поле, в которое вводится CPR, а затем кнопка отправки.

Теперь вот где проблема начинается.

это метод для кнопки отправки:

public ActionResult SendMailAsAStudent(string studentId, string companyId, int applicationId, string companyCVR, string studentCPR) 
     { 
      var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); 
      var student = manager.FindById(studentId); 
      var company = manager.FindById(companyId); 
      var application = db.Applications.Find(applicationId); 
      var contractobj = db.Contracts.Find(applicationId); 
      Project projectobj = db.Projects.Find(application.ProjectId); 


      var myMessage = new SendGridMessage(); 
      myMessage.From = new MailAddress("[email protected]"); 
      myMessage.AddTo(student.Email); 
      myMessage.AddTo(company.Email); 
      myMessage.Subject ="The contract for " + projectobj.Title + " is signed!"; 
      myMessage.Html = "Here is the final contract"; 


      LocalReport localReport = new LocalReport(); 

      localReport.ReportPath = Server.MapPath("~/Contracts/Contract.rdlc"); 
      ReportParameter cvrParameter = new ReportParameter("cvrParameter", companyCVR); 
      ReportParameter companyNameParameter = new ReportParameter("companyNameParameter", company.CompanyName); 
      ReportParameter companyAddressParameter = new ReportParameter("companyAddressParameter", company.Address); 
      ReportParameter companyCityParameter = new ReportParameter("companyCityParameter", company.City); 
      ReportParameter studentCityParameter = new ReportParameter("studentCityParameter", student.City); 
      ReportParameter studentNameParameter = new ReportParameter("studentNameParameter", student.FirstName+" "+student.LastName); 
      ReportParameter studentAddressParameter = new ReportParameter("studentAddressParameter", student.Address); 
      ReportParameter studentZipCodeParameter = new ReportParameter("studentZipCodeParameter", student.ZipCode); 
      ReportParameter jobStartDateParameter = new ReportParameter("jobStartDateParameter", projectobj.StartDate); 
      ReportParameter jobEndDateParameter = new ReportParameter("jobEndDateParameter", projectobj.EndDate); 
      ReportParameter jobDescriptionParameter = new ReportParameter("jobDescriptionParameter", projectobj.Description); 
      ReportParameter jobHoursPerWeekParameter = new ReportParameter("jobHoursPerWeekParameter", projectobj.HoursPerWeek.ToString()); 
      ReportParameter jobHourlyRateParameter = new ReportParameter("jobHourlyRateParameter", projectobj.HourlyRate.ToString()); 
      ReportParameter cprParameter = new ReportParameter("cprParameter", studentCPR); 
      ReportParameter studentSignDateParameter = new ReportParameter("studentSignDateParameter", DateTime.Today.ToString("dd/MM/yyyy")); 
      ReportParameter companySignDateParameter = new ReportParameter("companySignDateParameter", contractobj.CompanySigningDate); 
      ReportParameter companyRepNameParameter = new ReportParameter("companyRepNameParameter", contractobj.RepFirstName +" "+contractobj.RepLastName); 
      ReportParameter projectWorkFromParameter = new ReportParameter("projectWorkFromParameter", projectobj.WorkFrom); 


      localReport.SetParameters(new ReportParameter[] { cprParameter }); 
      localReport.SetParameters(new ReportParameter[] { cvrParameter }); 
      localReport.SetParameters(new ReportParameter[] { companyNameParameter }); 
      localReport.SetParameters(new ReportParameter[] { companyAddressParameter }); 
      localReport.SetParameters(new ReportParameter[] { studentNameParameter }); 
      localReport.SetParameters(new ReportParameter[] { studentAddressParameter }); 
      localReport.SetParameters(new ReportParameter[] { studentZipCodeParameter }); 
      localReport.SetParameters(new ReportParameter[] { jobStartDateParameter }); 
      localReport.SetParameters(new ReportParameter[] { jobEndDateParameter }); 
      localReport.SetParameters(new ReportParameter[] { jobDescriptionParameter }); 
      localReport.SetParameters(new ReportParameter[] { jobHoursPerWeekParameter }); 
      localReport.SetParameters(new ReportParameter[] { jobHourlyRateParameter }); 
      localReport.SetParameters(new ReportParameter[] { studentSignDateParameter }); 
      localReport.SetParameters(new ReportParameter[] { companySignDateParameter }); 
      localReport.SetParameters(new ReportParameter[] { companyRepNameParameter }); 
      localReport.SetParameters(new ReportParameter[] { projectWorkFromParameter }); 
      localReport.SetParameters(new ReportParameter[] { companyCityParameter }); 
      localReport.SetParameters(new ReportParameter[] { studentCityParameter }); 

      string reportType = "PDF"; 
      string mimeType; 
      string encoding; 
      string fileNameExtension = "pdf"; 
      Warning[] warnings; 
      string[] streams; 
      var renderedBytes = localReport.Render(reportType, "", out mimeType, out encoding, out fileNameExtension, out streams, out warnings); 
      Response.AddHeader("content-disposition", "attatchment; filename=Contract." + fileNameExtension); 

      MemoryStream stream = new MemoryStream(renderedBytes); 
      myMessage.AddAttachment(stream, "Contract.pdf"); 


      var apiKey = "removed for this post"; 
      var transportWeb = new Web(apiKey); 
      transportWeb.DeliverAsync(myMessage); 

      Contract contract = db.Contracts.Find(contractobj.ContractId); 

      contract.IsSigned = true; 
      contract.StudentSigningDate = DateTime.Today.ToString("dd/MM/yyyy"); 



      //db.Contracts.Add(contract); 
      db.SaveChanges(); 
      return RedirectToAction("Index", "Projects"); 
     } 

Тогда это происходит:

enter image description here

Запись добавляется как я хотел, чтобы она: isSigned ложна и студент подписания дата еще не заполнена. Когда он заполняется, он создает еще одну запись в базе данных, с датой подписания, именем и фамилией компании - false!

В чем причина этого? Я прокомментировал db.Contracs.Add (контракт), я нашел контракт, который мне нужен, с помощью applicationId, поскольку это будет уникальный идентификатор. Что я делаю не так? Я хочу, чтобы можно было добавить дату регистрации ученика и изменить значение IsSigned bool на true. Обратите внимание, что студент CPR не хранится в базе данных, «20» является идентификатор приложения

ответ

0

Так что я нашел решение:

теперь я скоротать contractId в качестве параметра вместо всех тех, которые я имел раньше:

public ActionResult SendMailAsAStudent(int contractId, string studentCPR) 

тогда я просто получить контракт, как так:

Contract contract = db.Contracts.Find(contractId); 

Изменен весь процесс извлечения для параметров:

ReportParameter cvrParameter = new ReportParameter("cvrParameter", contract.CVR); 
      ReportParameter companyNameParameter = new ReportParameter("companyNameParameter", contract.Company.CompanyName); 
      ReportParameter companyAddressParameter = new ReportParameter("companyAddressParameter", contract.Company.Address); 
      ReportParameter companyCityParameter = new ReportParameter("companyCityParameter", contract.Company.City); 
      ReportParameter studentCityParameter = new ReportParameter("studentCityParameter", contract.Student.City); 
      ReportParameter studentNameParameter = new ReportParameter("studentNameParameter", contract.Student.FirstName+" "+ contract.Student.LastName); 
      ReportParameter studentAddressParameter = new ReportParameter("studentAddressParameter", contract.Student.Address); 
      ReportParameter studentZipCodeParameter = new ReportParameter("studentZipCodeParameter", contract.Student.ZipCode); 
      ReportParameter jobStartDateParameter = new ReportParameter("jobStartDateParameter", contract.Application.Project.StartDate); 
      ReportParameter jobEndDateParameter = new ReportParameter("jobEndDateParameter", contract.Application.Project.EndDate); 
      ReportParameter jobDescriptionParameter = new ReportParameter("jobDescriptionParameter", contract.Application.Project.Description); 
      ReportParameter jobHoursPerWeekParameter = new ReportParameter("jobHoursPerWeekParameter", contract.Application.Project.HoursPerWeek.ToString()); 
      ReportParameter jobHourlyRateParameter = new ReportParameter("jobHourlyRateParameter", contract.Application.Project.HourlyRate.ToString()); 
      ReportParameter cprParameter = new ReportParameter("cprParameter", studentCPR); 
      ReportParameter studentSignDateParameter = new ReportParameter("studentSignDateParameter", DateTime.Today.ToString("dd/MM/yyyy")); 
      ReportParameter companySignDateParameter = new ReportParameter("companySignDateParameter", contract.CompanySigningDate); 
      ReportParameter companyRepNameParameter = new ReportParameter("companyRepNameParameter", contract.RepFirstName +" "+contract.RepLastName); 
      ReportParameter projectWorkFromParameter = new ReportParameter("projectWorkFromParameter", contract.Application.Project.WorkFrom); 

Это также устранило мою другую проблему с параметром из моего другого сообщения. An attempt was made to set a report parameter 'studentSignDateParameter' that is not defined in this report

Смежные вопросы