Ajax调用控制器后MVC刷新页面



我的控制器中有以下内容:

public async Task < ViewResult > Favourites(string ids) {
// code that fetches book data from API 
if (data != null)
{
var bookList = JsonConvert.DeserializeObject < Book[] > (data);
foreach(var book in bookList) {
var matches = new List < bookList > ();
if (bookList.All(book => ids.Contains(book.Id))) {
matches.Add(book);
}
return View("Index", matches.ToArray());
}
}
return View("Index");
}

在我看来:

<script>
function getFavouriteBooks() {
var ids = JSON.parse(localStorage.getItem("bookIds"));
$.ajax({
type: "POST",
url: '/Home/Favourites',
data: { ids: localStorage.getItem('bookIds') },
success: function (response) {
window.location.href = '/Home/Favourites/' + ids ;
}
});
}
</script>

我不认为window.location.href = '/Home/Favourites/' + ids;是正确的,但我的目标是用从我的控制器(return View("Index", matches.ToArray());(调用的View重新加载页面,我不知道如何做到这一点。

第一次击中控制器时,参数会正确填充数据,但第二次为空。我知道这是因为它是空的。

请有人解释一下如何在使用ids参数的ajax调用后加载View?

您的控制器仅由get请求调用如果您想从控制器中获得结果,请更改ajax设置或将HttpPost属性添加到控制器中。

type: "GET",

解决方案是将ajax调用成功部分更改为:

success: function (data) {
$("body").html(data);
}

最新更新