我可以将子动作的返回值传递给 ASP.net 中的视图吗

Posted

技术标签:

【中文标题】我可以将子动作的返回值传递给 ASP.net 中的视图吗【英文标题】:Can I pass the return value of a child action to the view in ASP.net 【发布时间】:2021-11-30 22:07:19 【问题描述】:

我正在尝试弄清楚如何将返回的值传递给视图,而不会出现任何异常。

我很难传递我的布尔值,因为它与我的视图模型异步。

控制器

[HttpGet]
        [ChildActionOnly]
        public async Task<bool> ValidateCurrentUser()
        
            bool result = false;
            try
            
                if (string.IsNullOrEmpty(Session["ticketKey"].ToString()))
                
                    return result;
                
                else
                
                    string ticket = Session["ticketKey"].ToString();
                    result = await _authenticationService.ValidateUser(ticket);
                    if (result)
                        return result;
                

            
            catch (Exception)
            
                return result;
            

            return result;
        

剃刀页面

 @
      bool isvalid = string.Equals(html.Action("ValidateCurrentUser", "Authentication").ToString(), true);
                            if (isvalid)
                            
                                <div>
                                   RED
                                </div>
                            
                            else
                            
                                <div>
                                   BLUE
                                </div>
                            
                        

【问题讨论】:

你用什么?网络还是网络核心? 这是.netframework 4.7.2 @Serge 【参考方案1】:

如果您在执行顺序方面遇到问题并且事情没有同步发生,请使用 TaskCompletionSource()。

Convert Action<T> callback to an await

【讨论】:

我认为问题更多在于 Razor 不支持异步操作请求。 您遇到了什么异常? InvalidOperationException: HttpServerUtility.Execute【参考方案2】:

试试这个。

        [HttpGet]
        [ChildActionOnly]
        public async Task<bool> ValidateCurrentUser()
        
            return await IsUserValid();
        

        private async Task<bool> IsUserValid()
        
            bool result = false;
            try
            
                if (string.IsNullOrEmpty(Session["ticketKey"].ToString())))
                
                    return result;
                
                else
                
                    string ticket = Session["ticketKey"].ToString());
                    result = await _authenticationService.ValidateUser(ticket);
                    if (result)
                        return result;
                

            
            catch (Exception)
            
                return result;
            

            return result;
        

【讨论】:

这会有什么不同? index 函数只是使用异步调用私有方法。 @Aniki 这只会给我 - InvalidOperationException: HttpServerUtility.Execute

以上是关于我可以将子动作的返回值传递给 ASP.net 中的视图吗的主要内容,如果未能解决你的问题,请参考以下文章

通过 Ajax 将布尔值传递给 asp.net api 控制器

如何在 asp.net mvc 5 中返回模型和参数中的另一个动作?

我没有从 ASP.NET MVC 中的控制器获取值

将复选框的值传递给 asp.net mvc4 中的控制器操作

通过 C++ 中的指针将子对象值传递给被调用者类

Telerik RadWindow Javascript 向 ASP.NET 返回值