我有一个Action,ViewModel可以显示按ProductName分组的全部产品。但这并不能告诉我每个部门有多少人。
假设我在IT部门有20台计算机,在行政部门有10台计算机,那么我的代码显示了我的产品名,即“计算机”。 Totaly withch是30,但不是部门的多少,而行政部门则相同。
与服务器或其他产品相同。
因此,我正在尝试使用此操作来获取每个部门的产品数量。我知道Altteady部门的ID和那些部门并不是动态填充的。
//这在我的HomeController中,这是我试图获取每个部门的总和的动作
?
我想在此ViewModel中调用“ GetStatusOfDepartments”操作,但这使我为null。你能帮我个忙吗 在这个ViewModel中调用动作?
[HttpGet]
public ActionResult GetStatusOfDepartments(int ProductId, int departmentId )
{
var products = context.Inventory.Where(x => x.ProductId == ProductId && x.departmentId == departmentId).FirstOrDefault();
if(products != null)
{
return Content(products.Status.ToString());
}
else
{
return Content("No products");
}
}
答案 0 :(得分:0)
在@ Html.Action中,第一个参数应该是动作名称,第二个参数应该是控制器名称。您需要更改代码以使其匹配。
答案 1 :(得分:0)
到目前为止,有几件事与众不同。
@Html.Action()
个请求,这很重要地表明没有为视图提供适当的模型。在试图回答这个问题时,很明显创建模型需要相对复杂的数据库查询。也许您最终使用上述方法来解决该问题,所以我将在不遵循复杂数据库查询的情况下尝试回答此问题,同时仍然坚持MVC设计模式(应避免上述问题)
创建模型
您已经很清楚要在视图上显示的内容。它与数据库模型完全不同,我们应该创建一个新模型。
public class ProductsInDepartments
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public int ITTotal { get; set; }
public int AdminTotal { get; set; }
public int Status { get; set; }
}
这只是视图中每个列的属性。我认为您只有两个部门,并且它们的名称未映射到数据库中。如果那是不正确的,那么我会建议使用其他模型和方法。
控制器
控制器需要准备一个模型。在这种情况下,我们将获取所有数据,然后将其转换为所需的模型结构:
public enum Departments // Enumerating a database key like this can be helpful if the database itself doesn't describe the numbers in a lookup table or something
{
IT = 1,
Admin = 2
};
[HttpGet]
public ActionResult Status()
{
var Inventory = context.Inventory.ToList(); // Get all records
var ViewModel = new List<Models.ProductsInDepartments>();
foreach (int ProductId in Inventory.Select(e => e.ProductId).Distinct().ToList())
{
ViewModel.Add(new Models.ProductsInDepartments()
{
ProductId = ProductId,
ProductName = Inventory.First(e => e.ProductId == ProductId).ProductName,
AdminTotal = Inventory.Count(e => e.ProductId == ProductId && e.DepartmentId == (int)Department.Admin),
ITTotal = Inventory.Count(e => e.ProductId == ProductId && e.DepartmentId == (int)Department.IT),
Status = Inventory.First(e => e.ProductId == ProductId).Status // I'm not sure what you are trying to do with Status, so you might need to change this
});
}
return View(ViewModel);
}
查看
现在视图非常简单。
@model List<ProductsInventory.Models.ProductsInDepartments>
<table class="table">
<tr>
<th>Product Name</th>
<th>IT Department</th>
<th>Administration</th>
<th>Total Products</th>
</tr>
@foreach (var Item in Model)
{
<tr>
<td>@Model.ProductName</td>
<td>@Model.ITTotal.ToString()</td>
<td>@Model.AdminTotal.ToString()</td>
@if (Model.Status == 0)
{
<td>No Products</td>
}
else
{
<td>@Model.Status</td>
}
</tr>
}
</table>
同样,我不确定您要如何处理状态,但是对于字符串覆盖,您可以像这样在视图中执行,这很好。该视图应处理表示层关注点的各个方面。