Я добавил в свой класс "Todo" иностранный ключ в мой класс "Аптека". Когда я добавляю или редактирую Todo, никакая Аптека не может быть связана (из окна выбора). Вот моя модель:
public class Todo
{
[Key]
public int ID { get; set; }
public Pharmacy Pharmacy { get; set; }
}
public class Pharmacy
{
[Key]
public int PharmacyID { get; set; }
public string Name { get; set; }
public string Pharmacist { get; set; }
[DataType(DataType.PhoneNumber)]
public int Phone { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
public int NPA { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string Canton { get; set; }
}
Мой код перечисляет все аптеки на моем Todo:
public class PharmacynamePageModel : PageModel
{
public SelectList PharmacyNameSL { get; set; }
public void PopulatePharmacysDropDownList(ApplicationDbContext _context, object selectedPharmacy = null)
{
var query = (from p in _context.Pharmacy orderby p.Name select p).ToList();
PharmacyNameSL = new SelectList(query, "PharmacyID", "Name", selectedPharmacy);
}
}
Хорошо, на этом этапе у меня есть этот код в моей HTML-форме:
<label asp-for="Todo.Pharmacy" class="control-label"></label>
<select asp-for="Todo.Pharmacy" class="form-control"
asp-items="Model.PharmacyNameSL">
<option value="">-- Select a Pharmacy --</option>
</select>
<span asp-validation-for="Todo.Pharmacy" class="text-danger" />
и мой PostAsync () в мои контроллеры создания и редактирования:
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
var emptyTask = new Todo();
if (await TryUpdateModelAsync(emptyTask, "Todo",
s => s.ID, s => s.OwnerID,
s => s.Title, s => s.Description,
s => s.DueDate,
s => s.Pharmacy,
s => s.Priority))
{
emptyTask.Status = EnumStatus.Open;
_context.Todo.Add(emptyTask);
await _context.SaveChangesAsync();
if (emptyTask.OwnerID != HttpContext.User.Identity.Name)
{
LogVM.AddLog("Todos", $"{HttpContext.User.Identity.Name} attributed a new task to {emptyTask.OwnerID}.", _context);
}
return RedirectToPage("./Index");
}
PopulatePharmacysDropDownList(_context, emptyTask.Pharmacy);
return RedirectToPage("./Index");
}
Все данные сопоставлены / связаны, но поле аптеки, значение которого всегда равно нулю.
Надеюсь, вы можете помочь мне:).
Спасибо за аванс.