【发布时间】: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<IActionResult> CompareItems([FromBody] int[] itemIds)是的,在调试模式下,如果放置断点,我可以看到数组值是正确的并且模型是正确生成的。但是在执行最后一行返回视图后,浏览器中页面的状态并没有改变。
标签: c# asp.net angularjs asp.net-mvc routes