[英]Accessing information in a partial view in an MVC application
我正在編寫一個基於C#的MVC Web應用程序,該應用程序顯示信息的類別和子類別。
因此,我為數據庫設置了一個與類別表相關的類別表,該類別表與自身相關,屬於子類別-所有這些都與Entity Framework掛鈎,並且運行良好。
我正在努力的是如何實現權限系統-我可以使用ViewBag輕松地做到這一點,但是我想知道這是否是“正確”的方法。
我有一個看起來像這樣的視圖:
@using Secure_Password_Repository.Utilities;
@using Secure_Password_Repository.Settings;
@using Secure_Password_Repository.ViewModels;
@model Secure_Password_Repository.ViewModels.CategoryDisplayItem
<ul id="roottree" class="treeview ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion ui-widget ui-sortable ui-accordion-content-active">
<li class="treeignore treeview ui-accordion ui-widget ui-helper-reset ui-sortable" data-id="0">
<div><i class="glyphicon glyphicon-folder-open rightfolderpadding"></i>Root</div>
<ul class="treeview ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion ui-widget ui-sortable ui-accordion-content-active" id="parent-1">
@foreach (var categoryitem in Model.categoryListItem.SubCategories)
{
@Html.Partial("_CategoryItem", categoryitem)
}
@if (Model.CanAddCategories)
{
@Html.Partial("_CreateCategory", Model.categoryAddItem)
}
</ul>
</li>
</ul>
CategorDisplayItem模型如下所示:
public class CategoryDisplayItem
{
public CategoryItem categoryListItem { get; set; }
public CategoryAdd categoryAddItem { get; set; }
public PasswordAdd passwordAddItem { get; set; }
public bool CanAddCategories { get; set; }
public bool CanEditCategories { get; set; }
}
public class CategoryItem : CategoryEdit
{
[Required]
public Int32 Category_ParentID { get; set; }
public virtual ICollection<CategoryItem> SubCategories { get; set; }
public virtual ICollection<PasswordItem> Passwords { get; set; }
public bool CanEditCategory { get; set; }
public bool CanDeleteCategory { get; set; }
}
public class CategoryEdit
{
public Int32? CategoryId { get; set; }
[Required]
public string CategoryName { get; set; }
}
我遇到的問題是如何為CategoryItem視圖模型設置CanEditCategory和CanDeleteCategory屬性。 權限不是按類別設置的,而是全局設置的,即,如果我的帳戶具有編輯類別的權限,則它有權編輯所有類別。
CategoryItem模型是填充視圖實體框架:
Category ReturnCategoryItem = DatabaseContext.Categories
.Where(c => c.CategoryId == categoryid)
.Include(c => c.SubCategories)
.Include(c => c.Passwords)
.Include(c => c.Passwords.Select(p => p.Creator))
.ToList()
.Select(c => new Category()
{
SubCategories = c.SubCategories
//make sure only undeleted subcategories are returned
.Where(sub => !sub.Deleted)
.OrderBy(sub => sub.CategoryOrder)
.ToList(),
Passwords = c.Passwords
//make sure only undeleted passwords - that the current user has acccess to - are returned
.Where(pass => !pass.Deleted && PermissionService.CanViewPassword(pass))
.OrderBy(pass => pass.PasswordOrder)
.ToList(),
CategoryId = c.CategoryId,
CategoryName = c.CategoryName,
Category_ParentID = c.Category_ParentID,
CategoryOrder = c.CategoryOrder,
Parent_Category = c.Parent_Category,
Deleted = c.Deleted
})
.SingleOrDefault();
子類別“類別”列表將隱式轉換為“ CategoryItem”列表。 那么我將如何設置CanEditCategories和CanDeleteCategories屬性?
就像我說的,我可以只使用ViewBag ...,但是我讀到的所有內容都表明使用ViewBag是不好的。
如果這些是每個用戶唯一的屬性,則可以將這些屬性添加到您的Identity中,然后在視圖中像這樣使用它們:
在您的視圖cshtml文件的頂部:
@using Microsoft.AspNet.Identity
然后使用以下語法訪問您的用戶名:
@if (@User.Identity.CanAddCategories())
{
@Html.Partial("_CreateCategory", Model.categoryAddItem)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.