【发布时间】:2021-04-02 15:57:21
【问题描述】:
我正在尝试将一个字符串数组从我的本地存储(键值)传递到 MVC 控制器。这是我的代码:
在cshtml中查看文件:
<script>
function getFavouriteBooks() {
var ids = JSON.parse(localStorage.getItem("bookIds"));
// returns: ["1", "2", "3"]
$.ajax({
type: "POST",
traditional: true,
url: '@Url.Action("Favourites", "Home")',
data: { ids: ids },
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (result) {
alert(result.Result);
}
}});
}
</script>
<button onClick="getFavouriteBooks()">Display Favourites</button>
我的控制器:
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");
}
控制器操作在按钮单击时成功调用,但 ids 参数始终为空,即使在控制台中不是。我哪里错了?
【问题讨论】:
-
@SandipBantawa,这是一个 POST,身体很好。尝试将 Action 中的 ID 更改为
string[]。例如。public ViewResult Favourites(string[] ids)。顺便说一句,您没有使用async或Task,最好将它们从签名中删除。 -
像这样设置您的数据... data: JSON.stringify(ids) .... 然后将您的 MVC 方法更改为 Favourites(string[] ids) .... 让 MVC 做反序列化传入的 JSON 数据的工作
-
谢谢@CallumMorrisson 我试过了,但它是一个空字符串
-
Favourites([FromBody]string[] ids) 将解决这个问题。这将告诉 MVC 将该数据从 POST 正文中提取出来,而不是从 URL 路由数据中提取
标签: javascript c# ajax asp.net-mvc razor