[英]ASP.NET MVC 5 Deleting Row in database
我只想了解Controller
javascript和Action
的行為。 目前,我有以下代碼。
Index.chtml
@model IEnumerable<WebSensoryMvc.Models.SessionData>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<div class="container">
<div class="col-md-8 col-md-offset-2">
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.SessionName)
</th>
<th>
@Html.DisplayNameFor(model => model.EvaluationDate)
</th>
<th>
@Html.DisplayNameFor(model => model.SessionNumber)
</th>
<th>
@Html.DisplayNameFor(model => model.Active)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.SessionName)
</td>
<td>
@Html.DisplayFor(modelItem => item.EvaluationDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.SessionNumber)
</td>
<td>
@Html.DisplayFor(modelItem => item.Active)
</td>
<td>
<a href="#" id=@item.SessionID data-toggle="modal" data-target="#deleteModal" title="Edit"><span class="glyphicon glyphicon-edit"></span></a>
<a href="@Url.Action("Details", "SessionData", new { id=item.SessionID })" data-toggle="tooltip" title="Details"><span class="glyphicon glyphicon-align-justify"></span></a>
<a href="#" onclick="deleteSession(@item.SessionID)" id="btnDelete" data-toggle="modal" data-target="#deleteModal" title="Delete"><span class="glyphicon glyphicon-trash"></span></a>
</td>
</tr>
}
</table>
</div>
</div>
<script type="text/javascript" language="javascript">
$(document).ready(function(){
$('[data-toggle="tooltip"]').tooltip();
});
function deleteSession(sessionId) {
bootbox.confirm("Are you sure you want to delete Session Id " + sessionId + "?", function (result) {
var token = $('input[name="__RequestVerificationToken"]').val();
$.ajax({
url: "@Url.Action("Delete", "SessionData")",
type: 'POST',
data: { id: sessionId, __RequestVerificationToken: token },
success: function (data) {
console.log(data);
},
error: function (data) {
console.log(data);
}
});
});
}
</script>
Index.chtml下的JavaScript
<script type="text/javascript" language="javascript">
function deleteSession(sessionId) {
bootbox.confirm("Are you sure you want to delete Session Id " + sessionId + "?", function (result) {
$.ajax({
url: "@Url.Action("Delete", "SessionData")",
type: 'POST',
data: { id: sessionId },
success: function (data) {
console.log(data);
},
error: function (data) {
console.log(data);
}
});
});
}
</script>
SessionDataController
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
SessionData sessionData = db.SessionDatas.Find(id);
if (sessionData == null)
{
return HttpNotFound();
}
return View(sessionData);
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
SessionData sessionData = db.SessionDatas.Find(id);
db.SessionDatas.Remove(sessionData);
db.SaveChanges();
return RedirectToAction("Index");
}
我要在這里執行的操作是使用jQuery
刪除記錄,並跳過MVC生成的方法,當您單擊Delete鏈接時,它將首先將您重定向到另一個視圖(如確認),然后完全刪除該記錄中的記錄。數據庫。
使用jQuery單擊刪除鏈接時遇到的奇怪行為是,當DeleteConfirm
操作中存在數據注釋ValidateAntiForgeryToken
時,我的JavaScript和操作未執行或激發。 但是,當我刪除ValidateAntiForgeryToken
它將執行我的JavaScript和操作。 有人可以啟發我嗎?
TIA
您是否嘗試過搜索? 這個問題有很多答案...
這是防止跨站點請求偽造的預期行為。 您需要包括from中的值;
@Html.AntiForgeryToken()
在您的通話中避免這種情況。 也許閱讀一下;
[ValidateAntiForgeryToken]
,用於跨源安全性。
您還必須在html中添加@Html.AntiForgeryToken()
並在AJAX調用中傳遞令牌參數值,才能成功使用[ValidateAntiForgeryToken]
屬性執行操作。
請查看它以獲取更多詳細信息: https : //stackoverflow.com/a/38893962/6606630
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.