【问题标题】:Net Core 2.0 pass data from IPageFilter Attribute to Razor Pages PageModelNet Core 2.0 将数据从 IPageFilter 属性传递到 Razor Pages PageModel
【发布时间】:2018-07-17 22:32:56
【问题描述】:

如何将数据(对象)从 IPageFilter 属性传递到 Razor 页面 PageModel。我可以在这个过滤器中创建一个 ViewData["example"] = object 吗?

我可以这样做;

    public void OnPageHandlerSelected(PageHandlerSelectedContext context)
    {
         //i want like this
        //ViewData["Member"] = memberUser;

        context.HttpContext.Items.Add("Member", memberUser);
    }

但我必须每次从 Items 中获取此对象。

我可以通过什么方式使用 ViewData 或 TempData 完成这项工作?

【问题讨论】:

    标签: c# attributes .net-core razor-pages


    【解决方案1】:

    很遗憾没有。 ViewDataTempData 仅与 PageResult 相关,过滤器管道甚至不知道 Result 将是什么。

    令人讨厌的是,用于创建PageHandlerXXXXContextPageContext 确实具有ViewData 属性,但您无法从IPageFilter 访问它。

    【讨论】:

      【解决方案2】:

      您可以通过上下文的HandlerInstance 属性访问选定的PageModel,如下所示:

      public void OnPageHandlerSelected(PageHandlerSelectedContext context) {
          var pageModel = context.HandlerInstance as PageModel ??
              throw new Exception("This page filter must run in a PageModel.");
      
          pageModel.ViewData["Member"] = memberUser;
          ...
      }
      

      考虑到 IPageFilter 仅适用于 Razor 页面,我看不出 HandlerInstance 除了 PageModel 之外的任何东西,但如果有人知道,请纠正我。

      【讨论】:

        【解决方案3】:

        如果您没有为页面定义页面模型类,则“HandlerInstance as PageModel”始终为空。在这种情况下需要检查为Page:

        public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
        {
            PageContext pageContext = null;
        
            if (context.HandlerInstance is Page page) { pageContext = page.PageContext; }
            else if(context.HandlerInstance is PageModel pageModel) { pageContext = pageModel.PageContext; }
        
            if (pageContext != null)
            {
                pageContext.ViewData["UserEmail"] = "email";
            }
        
            await next.Invoke();
        }
        

        【讨论】:

          猜你喜欢
          • 2021-05-14
          • 2019-03-25
          • 2018-08-16
          • 1970-01-01
          • 2018-03-30
          • 1970-01-01
          • 2019-12-13
          • 2019-05-10
          • 1970-01-01
          相关资源
          最近更新 更多