Asp.Net Core MVC 不加载视图

Posted

技术标签:

【中文标题】Asp.Net Core MVC 不加载视图【英文标题】:Asp.Net Core MVC don't load view 【发布时间】:2021-10-06 20:07:36 【问题描述】:

我正在使用 ASP.NET 核心开发 Web 应用程序,但遇到了一些问题。 当我到达一个控制器时,我将我的应用程序重定向到另一个打开页面的控制器。但是,当我到达返回应该打开的视图的控制器时,什么也没有发生,页面也没有加载。请求到达返回视图但页面未打开的控制器。奇怪的是,在为页面创建菜单选项时,一切正常并且页面已加载。 第一个控制器由 Ajax 代码调用,接收信息,然后调用另一个控制器打开另一个视图。 Ajax 代码会导致这个问题吗?

Ajax 代码

<script>
        var listaDeIds = [];
        function Mostrar() 
            var videos = document.querySelectorAll('#video');
            var count = 0;
            var lista = [];

            for (var i = 0; i < videos.length; i++) 
                var videoID = videos.item(i).getAttribute("name");
                const shadow = videos.item(i).shadowRoot;
                const childNodes = Array.from(shadow.childNodes);

                childNodes.forEach(childNode => 
                    if (childNode.nodeName === "DIV") 
                        const shadowChilds = Array.from(childNode.childNodes);
                        shadowChilds.forEach(shadowShild => 
                            if (shadowShild.nodeName === "DIV") 
                                const shadowChildsInternas = Array.from(shadowShild.childNodes);
                                shadowChildsInternas.forEach(interna => 
                                    if (interna.nodeName === "INPUT") 
                                        if (interna.checked === true) 
                                            lista[count] = videoID;
                                            count = count + 1;
                                        
                                    
                                );
                            
                        );
                    
                );
            
            if (lista.length > 0) 
                document.getElementById("btnplaylist").style.display = 'block';
             else 
                document.getElementById("btnplaylist").style.display = 'none';
            
            listaDeIds = lista;
        

        $('#Playlist').click(function () 
            //var url = "/Playlist/RecebeListaDeIds";
            var url = "/VideoSearch/PegarListaDeIds"
            var lista = listaDeIds;

            $.post(url,  pListaDeIds: lista , function (data) 
                $("#msg").html(data);
            );
        );

    </script>

从屏幕接收数据并调用另一个控制器的控制器 1

     [HttpPost]
    public ActionResult PegarListaDeIds(string[] pListaDeIds)
    
      if(AppUser.User != null)
      
        var appCache = AppCache.Instance;
        appCache.VideoId.InserirNoCache(pListaDeIds);

        return RedirectToAction("CreatePlaylist", "Playlist");
      
      else
      
        return BadRequest("Usuário não está logado");
      
    

控制器 2 被控制器 1 调用。这个控制器在被另一个控制器调用时不会加载视图。

[HttpGet]
    public ActionResult CreatePlaylist()
    
      return View();
    

【问题讨论】:

您必须提交表单,ajax 不允许从操作重定向。如果要重定向到另一个控制器,则必须将重定向代码放在 ajax 中,而不是在操作中。 【参考方案1】:

问题解决了。我将此 sn-p 添加到我的 Ajax 代码中,现在一切正常。

var url = '@Url.Action("CreatePlaylist", "Playlist")';
window.location.href = url.replace();

【讨论】:

以上是关于Asp.Net Core MVC 不加载视图的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core MVC 自动完成部分视图不显示结果

[MVC&Core]ASP.NET Core MVC 视图传值入门

如何让asp.net core mvc发布时候不编译cshtml视图

[MVC&Core]ASP.NET Core MVC 视图传值入门

ASP.NET Core MVC RedirectToAction 不工作

ASP.NET Core MVC 项目无法加载程序集