Автоматическое подставление значения из другой таблицы
ситуация следующая. Есть список офисов, создаваемый админом, у каждого офиса есть номер (Name) и картридж (Cartridge). Пользователи могут отправлять заказы на замену картриджа. Заказ состоит из даты (Created), номера офиса (Office) и картриджа (Cartridge), который используется в этом офисе. Необходимо, чтобы когда пользователь выбирает офис (у меня сделано через ViewBag), автоматически добавлялось значение картриджа, используемого в этом офисе. Как возможна данная реализация? Исходный код ниже.
Модели Office.cs и Order.cs
public class Office
{
public int Id { get; set; }
public string Name { get; set; } = "";
public string Cartridge { get; set; } = "";
}
public class Order
{
public int Id { get; set; }
public DateTime Created { get; set; }
public string Office { get; set; } = ""; /* Пользователь у меня через ViewBag выбирает свой офис из списка, загружаемый из Name в Office.cs */
public string Cartridge { get; set; } = ""; /* Вот здесь нужно, чтобы значение картриджа было то, которое есть у этого офиса в Cartidge в Office.cs */
}
Контроллер и представление для страницы с показом списка заказов от пользователей
/* Controller.cs */
public IActionResult Orders(int id)
{
var orders = _repo.GetAllOrders();
return View(orders);
}
/* View */
@model IEnumerable<Order>
<table>
<tbody>
@foreach (var order in Model)
{
<tr>
<th>@order.Created.ToString()</th>
<th>@order.Office</th>
<th>@order.Cartridge</th> /* Картридж к офису нужен здесь... */
</tr>
}
</tbody>
</table>
Контроллер и представления для формы заполнения заказа
/* OrdersController.cs */
private IRepository _repo;
public OrdersController(IRepository repo)
{ _repo = repo; }
[HttpGet]
public IActionResult EditOrder(int? id)
{
var offices = _repo.GetAllOffices();
ViewBag.Offices = new SelectList(offices, "Name", "Name");
if (id == null)
return View(new Order());
else
{
var order = _repo.GetOrder((int)id);
return View(order);
}
}
[HttpPost]
public async Task<IActionResult> EditOrder(Order order)
{
if (order.Id > 0)
_repo.UpdateOrder(order);
else
{ _repo.AddOrder(order); }
if (await _repo.SaveChangesAsync())
return RedirectToAction("Index");
else
return View(order);
}
/* View */
@model Order
<div>
<form asp-controller="Orders" asp-action="EditOrder" method="post">
<input asp-for="Id" />
<input asp-for="Created" />
<div>
<label>Ваш офис</label>
<select asp-for="Office" asp-items="ViewBag.Offices"></select>
</div>
<div>
/* код для картриджа, либо на более высоком уровне добавляется картридж */
</div>
<input type="submit" value="Отправить" />
</form>
</div>
То есть, например, есть у нас список офисов (номер-картридж):
1-Lenovo
2-HP
3-Samsung
Если выбирается офис 2, то в картридже должен быть Samsung.