私の部分的な見解では、私は私の部分ビューで@Html.AntiForgeryToken()
を追加しているだけでなく、私はコントローラに[ValidateAntiForgeryToken]
を追加しましたが、私はこのerror.The The required anti-forgery form field"__RequestVerificationToken" is not present.
私はいくつかのjqueryコードを使用して送信しました。しかし、私は再びエラーが発生しました。私はStackOverflow
のすべての質問を読んだが、彼らは私を助けることができませんでした。asp.net mvc "必要な偽造防止フォームフィールド" __ RequestVerificationToken "はありません。"
@model Dentistry.Areas.ViewModels.UserViewModel
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
<h4 class="modal-title custom_align" id="Heading">ویرایش کاربران</h4>
</div>
@if (Model != null && Model.UserId != string.Empty)
{
<div class="modal-body" id="editModal">
<form id="#myForm">
@Html.AntiForgeryToken()
<div class="form-group">
@Html.HiddenFor(a => a.UserId)
</div>
<div class="form-group">
<label>نام کاربری</label>
@Html.TextBoxFor(a => a.UserName, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.UserName)
</div>
<div class="form-group">
<label>نام</label>
@Html.TextBoxFor(a => a.FirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.FirstName)
</div>
<div class="form-group">
<label>نام خانوادگی</label>
@Html.TextBoxFor(a => a.LastName, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.LastName)
</div>
<div class="form-group">
<label>جنسیت</label>
@Html.TextBoxFor(a => a.Gender, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.Gender)
</div>
<div class="form-group">
<label>وضعیت</label>
@Html.TextBoxFor(a => a.IsActive, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.IsActive)
</div>
<div class="form-group">
<label>ایمیل</label>
@Html.TextBoxFor(a => a.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.Email)
</div>
<div class="form-group">
<label>آدرس</label>
@Html.TextBoxFor(a => a.Address, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.Address)
</div>
<div class="form-group">
<label>شماره تماس</label>
@Html.TextBoxFor(a => a.PhoneNumber, new { @class = "form-control" })
@Html.ValidationMessageFor(a => a.PhoneNumber)
</div>
<a href="#" id="btnSubmit" class="btn btn-success btn-block">ویرایش</a>
</form>
</div>
}
<script>
$(document).ready(function() {
$("#btnSubmit").click(function() {
var token = $('input[name="__RequestVerificationToken"]').val();
var headers = {};
// other headers omitted
headers['__RequestVerificationToken'] = token;
// $('#loaderDiv').show();
var myFormData = $("#myForm").serialize();
console.log(myFormData);
$.ajax({
cache:false,
type: "POST",
headers: headers,
url: "/Users/Edit",
dataType:"json",
data: myFormData,
success: function() {
// $('#loaderDiv').hide();
$('#edit').modal('hide');
window.location.href = "/Users/Index";
}
});
});
});
</script>
=========================================== ====
[HttpPost]
[ValidateAntiForgeryToken]
// [Bind(Include = "UserID,UserName,PasswordHash,FirstName,LastName,Gender,Email,CreateDate,IsActive,Address,PhoneNumber")]
public ActionResult Edit(UserViewModel user)
{
//
//bool status=false;
if (ModelState.IsValid)
{
var userQuery=db.User.SingleOrDefault(u => u.Id == user.UserId);
if (user.UserId != string.Empty)
{
userQuery.FirstName = user.FirstName;
userQuery.LastName = user.LastName;
userQuery.PhoneNumber = user.PhoneNumber;
userQuery.UserName = user.UserName;
userQuery.Email = user.Email;
userQuery.Address = user.Address;
userQuery.Gender = Convert.ToBoolean(user.Gender);
userQuery.IsActive = Convert.ToBoolean(user.IsActive);
}
else
{
User userDB=new User();
userDB = userQuery;
db.User.Add(userDB);
}
// db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
//status = true;
}
return RedirectToAction("Index");
// return View(user);
// return new JsonResult { Data = new { status = status } };
}
AFTは非表示フィールドに入り、その非表示フィールドを返信していません。つまり、私はjsonデータと一緒にそれをポストする方法がわかりません。これはhttps://stackoverflow.com/questions/4074199/jquery-ajax-calls-and-the-html-antiforgerytokenに役立ちますか?私はいくつかのコードをチェックしようとしています。私はこれを前にしたと確信しています... –
jsonオブジェクトに追加すると 'myFormData .__ RequestVerificationToken = $( 'input [name = "__ RequestVerificationToken"] ')。val(); 'トリックを行うべきである –
フォームIDの中に#を入れないでください。 –