我正在重构ASP .net核心项目,我想利用一些Ajax调用,但是遇到了以下问题:当我尝试向项目控制器中的方法发送请求时,它不起作用。
我有一个带有以下按钮的模式:
<button onclick="reviewRestaurant(@item.RestaurantId)" class="btn btn-outline-primary">Add review</button>
reviewRestaurant()函数如下所示:
function reviewRestaurant(restaurantId) {
let rating = $("input[type=radio]:checked").val();
let review = $('textarea').val();
let data = { restaurantId, rating, review };
$.ajax({
type: "POST",
url: `/Restaurants/Review`,
data: JSON.stringify(data),
success: function (res) {
// TODO: work on this later
},
error: function (err) {
console.log(err);
}
});
}
我想在Restaurants控制器中调用的方法如下:
[Authorize]
[HttpPost]
public async Task<IActionResult> Review(int restaurantId, string rating, string content)
{
var username = this.User.Identity.Name;
await this.restaurantsService.Review(restaurantId, username, rating, content);
return this.RedirectToAction("Details", new { id=restaurantID });
// the output of this method will be refactored later once I manage to get to it
}
问题是我无法到达控制器中的Review方法。我得到了400状态码,但我不知道如何解决。我尝试使用DTO和[FormData]属性作为方法参数,并尝试在不进行字符串化的情况下传递数据,仍然行不通。
如果有人可以帮助我,我将非常感激。我对ajax调用比较陌生,根本看不出我的错误在哪里。
答案 0 :(得分:0)
您可以尝试以下解决方案:
为您的参数(int restaurantId,字符串等级,字符串内容)创建一个通用类,并使用FromBody。 =>评论([FromBody] YourClassName)
并在您的ajax代码中写入此参数。 contentType:'application / json; charset = utf-8', 数据:“ json”
希望它能对您有所帮助。
答案 1 :(得分:0)
这是我正在测试的有效演示。
@section Scripts
{
<script>
function reviewRestaurant(restaurantId) {
let rating = $("input[type=radio]:checked").val();
let content = $('textarea').val();
let data = { restaurantId, rating, content };
$.ajax({
type: "POST",
url:'/Restaurants/Review',
data: data,
success: function (res) {
// TODO: work on this later
},
error: function (err) {
console.log(err);
}
});
}
</script>
}