【问题标题】:.Net core 3.1 return RedirectToPage("SomePage") not working as expecting.Net core 3.1 返回 RedirectToPage("SomePage") 没有按预期工作
【发布时间】:2020-02-28 10:06:12
【问题描述】:

我在我继承了我的基类的仪表板页面上,它期望基于值的重定向。我实际上不想显示页面的值为0。下面是代码。

这是我不想在仪表板页面上执行OnGet() 的主页。在此之前,我必须检查 HostBasePage 上的一些值

[Area("BusinessHost")]
[Authorize(Roles ="Host")]
public class dashboardModel : HostBasePage
{
    public dashboardModel(IAccountBusinessRepository accountBusinessRepository, ISessionManager sessionManager)
    : base(accountBusinessRepository, sessionManager) { }
    public void OnGet()
    {
    }
}

这是我的基类,我想进入“AccountSetup”页面。

public class HostBasePage : PageModel
{
    private readonly IAccountBusinessRepository _accountBusinessRepository;
    private readonly ISessionManager _sessionManager;
    public HostBasePage(IAccountBusinessRepository accountBusinessRepository, ISessionManager sessionManager)
    {
        _sessionManager = sessionManager;
        _accountBusinessRepository = accountBusinessRepository;
         ValidateAccount();
    }


    /// <summary>
    /// Validate Host account. 
    /// Account setup and payment needs to me complated.  
    /// </summary>
    private async Task<IActionResult> ValidateAccount()
    {
        try
        {
            var accountID = _sessionManager.GetSessionValue("AccountID");
          

            HostProfileValidateModel obj = await _accountBusinessRepository.HostProfileValidate(Convert.ToInt32(accountID));

            if (obj.IsAccountSetup == 0) { 
                return RedirectToPage("AccountSetup");
            }
                
          
            //if (obj.IsPaid == 0)
            //    throw new Exception("");

            return
                Page();
        }
        catch (Exception ex)
        {
            throw ex;
        }
       
    }

如果obj.IsAccountSetup 为0,我需要重定向。目前没有出现错误,但没有重定向到 AccountSetup 页面。

这是我要显示的页面。

[Area("BusinessHost")]
[Authorize(Roles = "Host")]
public class AccountSetupModel : PageModel
{
    private readonly IAccountBusinessRepository _accountBusinessRepository;
    private readonly IServiceBusinessRepository _serviceBusinessRepository;
    private readonly ICategoryBusinessRepository _categoryBusinessRepository;
    private readonly IFranchiseBusinessRepository _franchiseBusinessRepository;
    private readonly ISessionManager _sessionManager;
    private readonly IPlansBusinessRepository _plansBusinessRepository;
    private readonly IBusinessHostAccountSetupRepository _businessHostAccountSetupRepository;
    public AccountSetupModel(IBusinessHostAccountSetupRepository businessHostAccountSetupRepository, IAccountBusinessRepository accountBusinessRepository,IPlansBusinessRepository plansBusinessRepository , ISessionManager sessionManager, ICategoryBusinessRepository categoryBusinessRepository, IServiceBusinessRepository serviceBusinessRepository, IFranchiseBusinessRepository franchiseBusinessRepository)
    {
        _accountBusinessRepository = accountBusinessRepository;
        _serviceBusinessRepository = serviceBusinessRepository;
        _categoryBusinessRepository = categoryBusinessRepository;
        _franchiseBusinessRepository = franchiseBusinessRepository;
        _sessionManager = sessionManager;
        _businessHostAccountSetupRepository = businessHostAccountSetupRepository;
        _plansBusinessRepository = plansBusinessRepository;

    }
    public async void OnGet()
    {
        string email = _sessionManager.GetSessionValue("RegisterEmail");
        ModelServiceModel = new ServicesModel();
        ModelCategoryModel = new ServicesModel();
        ModelFranchiseModel = new FranchiseModel();
        GetAllAccountData();
        GetAllCategories();
        GetAllServices();
        GetAllFranchise();
        PlansModel = await _plansBusinessRepository.GetAllPlans();
        if (PlansModel != null)
        {
            PlansModel.TotalAmmount = PlansModel.AccountSetupCharges + PlansModel.MonthlyCharges + PlansModel.FrontDeskCharges;
        }
    }
    public void GetAllCategories()
    {
        var data = _categoryBusinessRepository.GetAllCategoriesList();
        ModelServiceModel.Category = data.Result.Select(x => new SelectListItem
        {
            Text = Convert.ToString(x.CategoryName),
            Value = Convert.ToString(x.CategoryID)

        }).ToList();
    }
   


}

【问题讨论】:

  • 我也已经尝试过:- return RedirectToPage("/AccountSetup", new { area = "BusinessHost" });并返回 RedirectToPage("/AccountSetup");
  • 与此页面或根相关的 AccountSetup 在哪里?
  • @ATerry 它与此页面有关,我有一个业务主机区域,并且页面“仪表板”和“AccountSetup”都在那里。

标签: c# asp.net-core .net-core .net-core-3.1


【解决方案1】:

你可以在你的PageModel 中实现OnPageHandlerExecutionAsync 方法

public class HostBasePage : PageModel
{
    private readonly IAccountBusinessRepository _accountBusinessRepository;
    private readonly ISessionManager _sessionManager;
    public HostBasePage(IAccountBusinessRepository accountBusinessRepository, ISessionManager sessionManager)
    {
        _sessionManager = sessionManager;
        _accountBusinessRepository = accountBusinessRepository;
    }

    public override async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
    {
        try
        {
            var accountID = _sessionManager.GetSessionValue("AccountID");

            HostProfileValidateModel obj = await _accountBusinessRepository.HostProfileValidate(Convert.ToInt32(accountID));

            if (obj.IsAccountSetup == 0)
            {
                context.Result = RedirectToPage("/AccountSetup", new { area = "BusinessHost" });
            }
            else
            {
                await next.Invoke();
            }

        }
        catch (Exception ex)
        {
            throw ex;
        }

    }
}

参考https://docs.microsoft.com/en-us/aspnet/core/razor-pages/filter?view=aspnetcore-3.1#implement-razor-page-filters-by-overriding-filter-methods

【讨论】:

  • ex 是捕获的异常的 catch 块中,throw ex; 永远不会正确。这样做会导致原始堆栈跟踪丢失,并替换为您throw ex; 所在行的堆栈跟踪(这是无用的)。只需写throw;
猜你喜欢
  • 2020-10-06
  • 2020-12-30
  • 2020-11-14
  • 2013-05-17
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2012-02-06
相关资源
最近更新 更多