Возможно, это должно быть что-то простое, но я просто не могу найти, что не так, и мне нужно объяснить свой сценарий, чтобы читатели могли понять.
У меня есть класс под названием Position, еще один заявитель, еще одна заявка, другая заявка и статус заявителя.
Класс Position содержит базовую информацию, такую как название позиции: например: .net developer.
Заявитель класса содержит основную информацию, такую как имя, имя и т. Д.
Класс ApplicantPosition содержит отношение, дату последнего изменения и CURRENTSTATUS.
Класс ApplicantPositionHistory имеет 2 ссылки на первый статус, называемый newStatus и oldStatus.
public class ApplicationPositionHistory
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ApplicationPositionHistoryID { get; set; }
[ForeignKey("ApplicantPositionID")]
public ApplicantPosition ApplicantPosition { get; set; }
[Column("ApplicantPositionID")]
public int ApplicantPositionID { get; set; }
[Column("OldStatusID")]
public int OldStatusID { get; set; }
[Column("NewStatusID")]
public int NewStatusID { get; set; }
[ForeignKey("OldStatusID")]
public Status OldStatus { get; set; }
[ForeignKey("NewStatusID")]
public Status NewStatus { get; set; }
[StringLength(500, MinimumLength = 3, ErrorMessage = "Comments should not be longer than 500 characters.")]
[Display(Name = "Comments")]
public string Comments { get; set; }
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Date")]
public DateTime DateModified { get; set; }
}
В моем интерфейсе у меня есть один экран, на котором показаны кандидаты, подавшие заявку на позицию
name position actions
andew .net developer view history
When they click on history they see:
old status new status comments datemodified
new applied new prospect
applied approved by hr approved by hr
Проблема в том, что на экране они создают сущности ApplicantPositionHistory.
Я хочу использовать newStatus из последней строки в качестве oldstatus, а newstatus должен быть тем, который выбирает пользователь. (Вот ключ ко всему вопросу)
В приведенном ниже коде newStatus и OldStatus всегда указывают на один и тот же идентификатор. Таким образом, вставка работает, но всегда использует один и тот же идентификатор и не показывает реального отслеживания истории статусов заявителя.
Это HTML
<table>
<tr>
<th>
Previous Status
</th>
</tr>
<tr>
<td>
@Html.Label(ViewData["oldStatus"].ToString())
</td>
</tr>
</table>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ApplicationPositionHistory</legend>
<div class="editor-label">
New Status
</div>
<div class="editor-field">
@Html.DropDownList("NewStatusID", (IEnumerable<SelectListItem>)ViewBag.Statuses)
@Html.ValidationMessageFor(model => model.NewStatusID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Comments)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Comments)
@Html.ValidationMessageFor(model => model.Comments)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Это действие контроллера
[HttpPost]
public ActionResult Create(ApplicationPositionHistory applicationpositionhistory)
{
applicationpositionhistory.DateModified = DateTime.Now;
if (ModelState.IsValid)
{
applicationpositionhistory.OldStatusID = applicationpositionhistory.NewStatusID;
applicationpositionhistory.OldStatus =
_unitOfWork.StatusRepository.GetStatusById(applicationpositionhistory.NewStatusID);
_unitOfWork.ApplicantPositionHistoryRepository.InsertApplicationPositionHistory(applicationpositionhistory);
_unitOfWork.Save();
return RedirectToAction("History", new { applicantPositionID = ViewData["applicantPositionId"] });
}
ViewBag.oldStatusID = new SelectList(_unitOfWork.StatusRepository.GetAllStatus(), "StatusID", "status", applicationpositionhistory.OldStatusID);
ViewBag.newStatusID = new SelectList(_unitOfWork.StatusRepository.GetAllStatus(), "StatusID", "status", applicationpositionhistory.NewStatusID);
return View(applicationpositionhistory);
}