簡體   English   中英

ASP.NET MVC 5刪除數據庫中的行

[英]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()

在您的通話中避免這種情況。 也許閱讀一下;

http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

[ValidateAntiForgeryToken] ,用於跨源安全性。

您還必須在html中添加@Html.AntiForgeryToken()在AJAX調用中傳遞令牌參數值,才能成功使用[ValidateAntiForgeryToken]屬性執行操作。

請查看它以獲取更多詳細信息: https : //stackoverflow.com/a/38893962/6606630

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM