【问题标题】:How can I redirect to different view? Asp.net MVC not loading the reteurned view如何重定向到不同的视图? Asp.net MVC 未加载重新调用的视图
【发布时间】:2021-09-29 16:33:56
【问题描述】:

我正在使用 ASP.net MVC 和 AngularJS。 在我当前的页面中,我选择了一些项目,然后单击按钮,调用了 angular 函数

var itemIds = [];
 //... somehow I get my items from the grids
var url = 'http://localhost/myController/CompareItems';
   $http.post(url, groupIds)
                .then(function (response) {
//                    var data = response.data;
                    //what to do here?
                }
                ).finally(function () {
                    vm.loading = false;
                });
}

c# MVC 控制器如下:(myController.cs)

public async Task<IActionResult> CompareItems([FromBody] int[] itemIds)
        {
            var model = new CompareModel
            {
              property1= ..,
              property2= ..,
              ......
              ......

            };
            return View("CompareItems",model);

        }

在调用 $http.post 时,调试器来到上述控制器,准备模型并返回视图。 没有错误,但页面没有重定向。 这里有什么问题?

注意:在问这个问题之前,我已经搜索了许多其他帖子。我发现很多人都在建议 RedirectToAction。我试过这个,那个不起作用。我的问题是,为什么要重定向到另一个动作。我已经在使用所需的参数值的预期操作方法中。

事情很简单,只需要从javascript中收集选择的项目,然后传递给mvc controller-action即可。它返回一个不同的视图。

【问题讨论】:

  • 我的另一个尝试:更改了返回视图模型的 mvc 控制器类返回类型。 ``` public async Task CompareItems([FromBody] int[] itemIds) { var model = new CompareModel { property1= .., property2= .., ...... ...... };返回模型; } ```然后在 http.post 响应中,获取模型。我知道, window.location = 'new/url ' 有效。问题是如何将响应模型作为参数添加到 window.location 中。
  • 嗨@rasoo。只是为了澄清一下,对于您指定的第一种方法,您说“我已经在我预期的操作方法中”,这是否意味着如果您在操作方法上放置一个断点,就可以到达?您的呼叫“进入”操作,然后视图没有返回?或者您甚至无法访问操作方法?
  • @DaveMiller ,是的。 “预期方法”我的意思是public async Task&lt;IActionResult&gt; CompareItems([FromBody] int[] itemIds) 是的,在调试模式下,如果放置断点,我可以看到数组值是正确的并且模型是正确生成的。但是在执行最后一行返回视图后,浏览器中页面的状态并没有改变。

标签: c# asp.net angularjs asp.net-mvc routes


【解决方案1】:

从另一个文件夹调用视图

return View("MyViewFolder/MyViewName.cshtml");

或者以模型为对象

return View("MyViewFolder/MyViewName.cshtml", model);

还请检查您是否已将方法返回类型设置为async,如果等待正在进行的执行可能会阻止您。

【讨论】:

  • 谢谢,但请先阅读我的帖子。我已经完成了这个 return View("CompareItems",model);
  • 是的,但您在标题中写道“我如何重定向到不同的视图?”所以我认为您正在尝试重定向到从不同文件夹查看
  • 如果您不是很忙,请阅读整篇文章。
【解决方案2】:

您似乎缺少一些东西。

你可能想要替换

return View("Login")

return RedirectToAction("Login");

我只是给出一个实例,你可能想用你所拥有的替换它。

【讨论】:

猜你喜欢
  • 2010-10-07
  • 1970-01-01
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多