簡體   English   中英

如何在ASP.NET Razor頁面中為我的CRUD操作使用多個基類

[英]How do I use multiple base classes for my CRUD operation in ASP.NET Razor pages

我設計了一個ASP.NET Core Razor Pages應用程序,它實現了下拉列表類,並使用該類作為Create,Read和Update類的基礎。

現在我想實現匿名身份驗證,我已經為此創建了另一個類,理想情況下,它應該是Create,Read和Update類的基類。 當我嘗試添加它時,系統說我不能使用2個基類。

如何在ASP.NET Core Razor(MVVM)中使用多個基類

我嘗試使用這兩個類但是觸發了一個錯誤,指出我不能使用多個基類

我的下拉列表基類

public class GLRefPageModel: PageModel
    {
        public SelectList GLRefNameSL { get; set; }

        public void PopulateGLRefDropDownList(strMaterialsTransactContext _context, object selectedGLRef = null)
        {
            var GLRefsQuery = from d in _context.GLRef
                              select d;

            GLRefNameSL = new SelectList(GLRefsQuery.AsNoTracking(), "ID", "Description", selectedGLRef);

        }
    }

我的身份驗證基類

public class DI_BasePageModel : PageModel
    {
        protected ApplicationDbContext Context { get; }
        protected IAuthorizationService AuthorizationService { get; }
        protected UserManager<IdentityUser> UserManager { get; }

        public DI_BasePageModel(
            ApplicationDbContext context,
            IAuthorizationService authorizationService,
            UserManager<IdentityUser> userManager) : base()
        {
            Context = context;
            UserManager = userManager;
            AuthorizationService = authorizationService;
        }
    }

我的編輯課

public class EditModel : GLRefPageModel
    {
        private readonly strMaterialsTransact.Models.strMaterialsTransactContext _context;

        public EditModel(strMaterialsTransact.Models.strMaterialsTransactContext context)
        {
            _context = context;
        }

        [BindProperty]
        public strMovement strMovement { get; set; }

        public async Task<IActionResult> OnGetAsync(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }



            if (strMovement == null)
            {
                return NotFound();
            }
            //select the current GLRef
            PopulateGLRefDropDownList(_context, strMovement.GLRefID);
            return Page();
        }

        public async Task<IActionResult> OnPostAsync(int? id)
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            var strMovementToUpdate = await _context.strMovement.FindAsync(id);

            if (await TryUpdateModelAsync<strMovement>(
                strMovementToUpdate,
                "strmovement", //prefix for form value
                s => s.ID, s => s.TransactionDate, s => s.QtyFromStore, s => s.IDPartNbr,
                s => s.QtyToStore, s => s.GLRefID, s => s.ShopOrder, s => s.TransactionReason, s => s.TransactionReason,
                s => s.OwnerID, s => s.TimeLastAccessed, s => s.Initials, s => s.LastUser))
            {
                await _context.SaveChangesAsync();
                return RedirectToPage("./Index");
            }

            //**Select GLRef if TryUpdateModelAsync fails
            PopulateGLRefDropDownList(_context, strMovementToUpdate.GLRefID);
            return Page();
        }
    }

我希望能夠在我的創建,更新和讀取操作中為我的下拉列表操作調用基類,並且還能夠調用(和使用)該類進行匿名身份驗證練習

我已經能夠通過使用組合設計模式將所有類放入DI_BasePageModel類來解決問題,如下所示:

public class DI_BasePageModel : PageModel
    {
        protected ApplicationDbContext Context { get; }
        protected IAuthorizationService AuthorizationService { get; }
        protected UserManager<IdentityUser> UserManager { get; }

        public DI_BasePageModel(
            ApplicationDbContext context,
            IAuthorizationService authorizationService,
            UserManager<IdentityUser> userManager) : base()
        {
            Context = context;
            UserManager = userManager;
            AuthorizationService = authorizationService;
        }


        public SelectList GLRefNameSL { get; set; }

        public void PopulateGLRefDropDownList(ApplicationDbContext _context,     object selectedGLRef = null)
        {
            var GLRefsQuery = from d in _context.GLRef
                              select d;

            GLRefNameSL = new SelectList(GLRefsQuery.AsNoTracking(), "GLRefID", "Description", selectedGLRef);

        }

謝謝你指出克里斯普拉特

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM