【发布时间】:2016-08-17 09:12:21
【问题描述】:
我只是想在我的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 生成的方法,当您单击删除链接时,它会首先将您重定向到另一个视图,就像确认一样,然后它才会完全删除数据库中的记录。
我在使用 jQuery 单击删除链接时遇到的奇怪行为是,当 DeleteConfirm 操作中存在数据注释 ValidateAntiForgeryToken 时,我的 javascript 和操作没有被执行或触发。但是,当我删除 ValidateAntiForgeryToken 时,它会执行我的 javascript 和操作。任何人都可以启发我吗?
TIA
【问题讨论】:
标签: javascript jquery asp.net ajax asp.net-mvc