【发布时间】:2021-11-02 16:52:54
【问题描述】:
我是 .Net Core 和 MVC 的新手。我有几个 Razor 页面,允许用户发布诸如 cmets 和单个帖子的评级之类的东西,但我想尝试一些新的东西来喜欢一个帖子,这样就可以使用 javascript 完成它而无需刷新页面。为此,我尝试使用 jQuery ajax 通过 API 控制器将数据从页面传递到服务类。不幸的是,每次我尝试将一个简单的值传递给控制器时,我都会收到一个错误 400,表示该值无法转换为 System.WhateverObjectTypeITry。例如,如果我尝试将其作为整数传递,则会得到“无法将 JSON 值转换为 System.Int32”,如果尝试将其作为字符串传递,则会得到“无法将 JSON 值转换为 System.String "
我的 API 控制器如下所示:
[HttpPost]
[Route("AddPostLike")]
public async Task<string> AddPostLike([FromBody] int postid)
{
if(_signInManager.IsSignedIn(User))
{
ApplicationUser user = await _userManager.GetUserAsync(User);
Likes newLike = new Likes();
newLike.Post = Convert.ToInt32(postid);
newLike.Commentid = null;
newLike.Userid = user.Id;
await _likeService.LikeAsync(newLike);
return $"liked";
}
else
{
return $"User Must Be Logged in to Like";
}
}
我在 Razor 页面中的 jQuery 如下所示:
<script>
$(document).ready(function () {
$('#like-post').on('click', function () {
var postid = parseInt($('#idlabel').text());
$.ajax({
url: '/api/Likes/AddPostLike/',
type: 'POST',
dataType: 'text',
data: '{"postid":"' + postid + '"}',
contentType: 'application/json',
success: function () {
var likecount = parseInt($('#like-post-count').text());
likecount + 1;
$('#like-post-count').text(likecount);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("responseText=" + XMLHttpRequest.responseText + "\n textStatus=" + textStatus + "\n errorThrown=" + errorThrown);
}
});
});
});
</script>
我正在使用 .Net Core 5.0 并尝试使用 Contoso Crafts 演示作为指南,但构建 Contoso Crafts 的 Microsoft 人员决定使用 Blazor 组件而不是剃须刀页面,尽管没有与控制器进行通信要求开发人员编写任何 javascript(请参阅https://github.com/dotnet-presentations/ContosoCrafts/blob/master/src/Components/ProductList.razor)并且他们不使用数据库来存储数据(他们使用静态 JSON 文件),所以我不得不出去寻找一个可能实际可行的解决方案现实世界。
【问题讨论】:
标签: asp.net asp.net-core asp.net-core-webapi