jQuery发布事件是
<script>
$(document).ready(function () {
$("#going").click(function () {
$.post("/Home/ToggleGoing",
{
going: $("#going").val()
},
function (data) {
//No success code.
});
});
});
</script>
控制中的行动是
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ToggleGoing(bool going, int? id)
{
var e = db.Events.FindAsync(id);
然而,javascript控制台显示它有500错误?
POST https://localhost:44300/Home/ToggleGoing 500 (Internal Server Error)
答案 0 :(得分:3)
这:ValidateAntiForgeryToken
。
使用$.post()
时,不包含包含验证令牌的隐藏字段。您需要将其包含在POST数据中:
$.post("/Home/ToggleGoing",
{
going: $("#going").val(),
__RequestVerificationToken: $('input[name="__RequestVerificationToken"]').val()
}, function (data) {
});
当然,这假设您已在某处向您的表单添加@Html.AntiForgeryToken()
。
答案 1 :(得分:1)
更正您的帖子网址:
$.post("/Home/ToggleGoing", { going: $("#going").val() , id:???//pass value of id }, function (data) {})
确保going
的类型为bool
。
编辑: -
正如我在评论部分中的建议为提问者工作所以我也在回答这个问题。
只需从帖子控制器中移除[ValidateAntiForgeryToken]
令牌,或在ValidateAntiForgeryToken
中添加$.Post()
作为参数。
答案 2 :(得分:0)
我已经回答了几乎类似的问题:
How to get {ID} in url “controller/action/id” in a post action?
正如上面的答案所述,你也错过了url末尾的id,因为它被映射为&#34; {controller} / {action} / {id}&#34;在RegisterRoutes方法的RouteConfig.cs文件中。因此,您更正的网址将是:
"/Home/ToggleGoing/{id}" //in your case: "/Home/ToggleGoing/4"
接下来是&#34;去&#34;是bool参数。并且检查复选框是否被检查&#34; val()&#34;不是正确的方法,你应该用它:
$("#going").is(':checked')