'How to catch data from other model
There is a simple question, but it's a problem for me. Admin creates the list of offices, and each office has a cartridge. User creates an order for his office to get the cartridge. He chooses his office from the list which is showed with help of ViewBag (current solution). How this code below can be modified that website could automatically add name of the cartridge depend on selected office?
Models:
Office.cs
public class Office
{
public int Id { get; set; }
public string Name { get; set; } = "";
public string Cartridge { get; set; } = "";
}
Order.cs
public class Order
{
public int Id { get; set; }
public DateTime Created { get; set; }
public string Office { get; set; } = ""; /* User chooses office from Name in Office.cs */
public string Cartridge { get; set; } = ""; /* Cartridge from Office.cs is required here depend on choice */
}
Controller and View for a page of showing the list of orders:
/* 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> /* How to show the cartridge of the certain office here? */
</tr>
}
</tbody>
</table>
Controller and View for a page with the form to add new order:
/* 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" type="hidden" />
<input asp-for="Created" type="hidden" />
<div>
<label>Your office</label>
<select asp-for="Office" asp-items="ViewBag.Offices"></select>
</div>
<div>
/* code for adding cartridges or automatical adding in controllers/models */
</div>
<input type="submit" value="Send" />
</form>
</div>
I will really appreciate for ideas.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
