Я сейчас работаю в моем ASP.NET Core
проекте. Я создал несколько классов, которые я сопоставил с таблицами базы данных.
Класс поручения:
public class Errand : IDbEntity
{
public int Id { get; set; }
public int PANumber { get; set; }
public string Description { get; set; }
public string Issuer { get; set; }
public string Stakeholders { get; set; }
public string Background { get; set; }
public string DescriptionOfMission { get; set; }
public string AcceptanceCriteria { get; set; }
public string TestObject { get; set; }
public DateTime AvailableFrom { get; set; }
public DateTime TestStart { get; set; }
public DateTime TestDelivery { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public int CoreId { get; set; }
public virtual Core Core { get; set; }
public int MachineTypeId { get; set; }
public virtual MachineType MachineType { get; set; }
public int ProjectNrId { get; set; }
public virtual ProjectNumber ProjectNr { get; set; }
public int TestTypeId { get; set; }
public virtual Group TestType { get; set; }
public virtual DBErrandStatus status { get; set; }
}
А остальные классы выглядят так же, как и все остальные.
Вот класс Core:
public class Core : IDbEntity
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
public DateTime Updated { get; set; }
public virtual ICollection<Errand> Errands { get; set; }
}
Я выполнил миграцию в базу данных, и все отлично работает, а таблица Errand содержит внешние ключи Core, Group, MachineType & ProjectNumber
.
Теперь к моей проблеме. Я пытаюсь создать A Errand
и в представлении, где пользователь выберет значения для поручения, я сделал выпадающие списки для внешних ключей. вот код для этого:
<form method="post" asp-controller="Home" asp-action="ExecuteCreateErrand">
<div class="row">
<div class="col-md-2">
<label>PA number:</label>
<input asp-for="@Model.errand.PANumber" class="form-input" type="text" />
</div>
<div class="col-md-4">
<label>Title:</label>
<input asp-for="@Model.errand.Description" class="form-input" placeholder="Title" type="text" />
</div>
<div class="col-md-2">
<label>Core:</label>
<select asp-for="@Model.errand.Core" class="form-input">
@foreach(var core in Model.Core)
{
<option>@core.Name</option>
}
</select>
</div>
<div class="col-md-4">
<label>Project Nr:</label>
<select asp-for="@Model.errand.ProjectNr" class="form-input">
@foreach(var projNr in Model.ProjectNumber)
{
<option>@projNr.Name</option>
}
</select>
</div>
</div>
<div class="row">
<div class="col-md-2">
<label>Machine type:</label>
<select asp-for="@Model.errand.MachineType" class="form-input">
@foreach (var MT in Model.MachineType)
{
<option>@MT.Name</option>
}
</select>
</div>
<div class="col-md-4">
<label>Issuer:</label>
<input asp-for="@Model.errand.Issuer" class="form-input" value="@Model.User.Username" type="text" readonly />
</div>
<div class="col-md-2">
<label>Test type</label>
<select asp-for="@Model.errand.TestType" class="form-input">
@foreach (var TestType in Model.TestType)
{
<option>@TestType.Name</option>
}
</select>
</div>
<div class="col-md-4">
<label>Stakeholders</label>
<input class="form-input" asp-for="@Model.errand.Stakeholders" placeholder="Stakeholders" type="text" />
</div>
</div>
<div class="row">
<div id="sandbox-container" class=" span5 col-md-4">
<label>Testobject avalible from:</label>
<input asp-for="@Model.errand.AvailableFrom" class="form-input" type="text" value="@DateTime.Now.ToString("yyyy/MM/dd")" />
</div>
<div id="sandbox-container" class=" span5 col-md-4">
<label>Desired start of test:</label>
<input asp-for="@Model.errand.TestStart" class="form-input" type="text" value="@DateTime.Now.ToString("yyyy/MM/dd")" />
</div>
<div id="sandbox-container" class=" span5 col-md-4">
<label>Desired end of test:</label>
<input asp-for="@Model.errand.TestDelivery" class="form-input" type="text" value="@DateTime.Now.ToString("yyyy/MM/dd")" />
</div>
</div>
<div class="row">
<div class="col-md-10"></div>
<div class="col-md-2">
<button type="submit" class="btn btn-lg btn-block mt-4 vBtn">Create Errand</button>
</div>
</div>
</form>
Но когда я позже установил точку останова для действия, которое выполняется после отправки формы, я получаю, что Errand.Core = null
и Errand.CoreId = 0
Вот код действия:
public IActionResult ExecuteCreateErrand([FromForm] Errand errand)
{
var SQL = new SQLErrandStorage();
var handler = new ErrandHandler(SQL);
handler.Create(errand);
return RedirectToAction("RenderAllErrandsView", "Home");
}
[FromForm] Errand errand
возвращает это
Core = null и CoreId = 0
Действие вызывает этот метод:
public void Create(Errand errand)
{
errandStorage.CreateErrand(errand);
}
, который в свою очередь вызывает этот метод, который создает поручение:
public void CreateErrand(Errand errand)
{
using (var db = new PADBContext())
{
db.Errand.Add(errand);
db.SaveChanges();
}
}
У меня вопрос, как я могу сделать внешние ключи прикрепленными к отправленной форме. Как я могу изменить значения Core = null and CoreId = 0
на те, которые я выбрал в раскрывающемся списке?
Надеюсь, это достаточно хорошо объясняет мою проблему. Я был бы очень признателен за помощь или обратную связь. Заранее спасибо!