JQuery関数は正常に動作しますが、アクションメソッドに[AntiForgerToken]
を有効にすると、JQuery関数はアクションメソッドにアクセスできません。私はAntiForgeryTokenを有効にし、他のスニペットがあります。[AntiForgeryToken]が有効な場合、JQueryからアクションメソッドにアクセスできない
@using (Html.BeginForm("InsertStudent","Students",FormMethod.Post, new { @id="myform"}))
{
@Html.AntiForgeryToken()
ビュー内の@Html.AntiForgeryToken()
が有効にされているかどうかは関係ありません、jQueryの機能は良い作品を、問題との1はアクションメソッドであります...
どうしてですか?私は何が欠けているのですか?私が読んだことは、ポストアクションメソッドで[AntiForgeryToken]
を有効にしてセキュリティを確保することが非常に重要であるため、アプリケーションがアクションメソッドとビューの両方の場所で有効になっている必要があると思います。
jQueryの機能:
function InsertShowStudents() {
var counter = 0;
$.ajax({
type:"post",
url: "/Students/InsertStudent/",
data: { Name: $("#Name").val(), LastName: $("#LastName").val(), Age: $("#Age").val() }
}).done(function (result) {
if (counter==0) {
GetStudents();
CounterStudents();
counter = 1;
}
else {
$("#tableJQuery").append("<tr>"+"<td>"+result.Name+"</td>"+"<td>"+result.LastName+"</td>"+"<td>"+result.Age+"</td>"+"</tr>")
}
//clear the form
$("#myform")[0].reset();
}).error(function() {
$("#divGetStudents").html("An error occurred")
})
}
対処方法:テーブルの
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult InsertStudent(Student student)
{
if (ModelState.IsValid)
{
db.Students.Add(student);
db.SaveChanges();
//ModelState.Clear();
return RedirectToAction("InsertStudent");
}
return View(student);
}
列:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
@* <td style="display:none" class="tdStudentID">@Html.DisplayFor(modelItem => item.StudentID)</td> *@
<td>
<img src="~/images/deleteIcon.png" width="20" height="20" class="imgJQuery" data-id="@item.StudentID" />
</td>
<td>
@Html.ActionLink("Details","Details", new { id=item.StudentID})
</td>
</tr>
}
あなたはajaxデータにトークンの値を渡しません。 'data:$( '#myform')。serialize()を使うと簡単です。それはトークンを含むすべてのフォームコントロールをシリアライズします。しかし、あなたのPOSTメソッドで 'RedirectToAction()'を持つことは無意味です - ajaxコールは決してリダイレクトしません。 –
@StephenMueckeそれは今働いています:)私はあなたにポイントを与えることができるように、または私はそれを行う場合は、あなたが好きですか答えを投稿するつもりですか? – AlexGH
私に20分を与えると、私はこれと別の代替も追加します –