我正在尝试使用 MVC5 为产品模型生成表格视图。
我知道可以为控制器中的 Action 定义[attribute]形式的属性。但是假设在我的索引视图中,我想要显示" 产品"的所有字段。模型给管理员(例如名称,价格,数量),并且仅向客户提供其中的一些字段(例如,仅名称和价格)。
如何编辑我的
public ActionResult Index()
{
return View(db.Products.ToList());
}
实现这个目标?
更新:我的问题是我是否需要创建多个视图,或者我必须以某种方式自定义Index()Action中的视图?
答案 0 :(得分:0)
虽然这不是你神奇的解决方案,但它会起作用。
您可以使用Attribute
和ChildActions在没有Html.Partial
的情况下执行此操作。当然这是一项工作,需要另外两个部分才能维持......
示例:
产品视图您要显示表格的位置。
@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>
这样做可以使您的角色检查逻辑不受您的影响。