基于属性的定制视图
本文关键字:视图 属性 于属性 | 更新日期: 2023-09-27 17:50:45
我正在尝试使用MVC5为产品模型生成表视图。
我知道可以为控制器中的Action定义[attribute]形式的属性。但是假设在我的Index视图中,我想向管理员显示"Product"模型的所有字段(例如名称、价格、数量),而只向客户显示其中的一些字段(例如只有名称和价格)。
如何编辑我的
public ActionResult Index()
{
return View(db.Products.ToList());
}
来实现这个?
更新:我的问题是我是否需要创建多个视图,或者我必须以某种方式自定义Index() Action内部的视图?
虽然这不是您的神奇解决方案,但它会起作用。
您可以通过使用Html.Partial
和ChildActions来实现没有Attribute
的情况。当然,这是一点工作,确实需要2个部分来维护…
的例子:
产品视图,您希望在其中显示表格。
@Html.Action("BuildProductTable", "Products")
产品控制器public class ProductsController : Controller
{
// other methods removed
// ...
[ChildActionOnly]
public ActionResult BuildProductTable()
{
if (User.IsInRole("Admin"))
{
// Return Admin ViewModel & Partial View
// Create and populate Admin ViewModel here
return PartialView("_AdminProductTable", ProductsAdminVM);
}
// Create and populate Customer ViewModel here
return PartialView("_CustomerProductTable", ProductsCustomerVM );
}
}
然后您可以创建两个部分视图,使用传递给它的ViewModel以您想要的方式显示表和您想要的列。
客户产品表部分视图
@model YourProject.Web.Models.ProductsCustomerVM
<table>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
<tr>
<td>data..</td>
<td>data..</td>
</tr>
</table>
管理产品表部分视图
@model YourProject.Web.Models.ProductsAdminVM
<table>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>Column 4</th>
</tr>
<tr>
<td>data..</td>
<td>data..</td>
<td>data..</td>
<td>data..</td>
</tr>
</table>
这样做可以使你的角色检查逻辑脱离你的视图。