Автоматическое подставление значения из другой таблицы

ситуация следующая. Есть список офисов, создаваемый админом, у каждого офиса есть номер (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.


Ответы (0 шт):