使用@ Ajax.BeginForm()通过AntiforgeryToken生成

问题描述 投票:0回答:1

我在ajax方法内手动生成防伪令牌时遇到问题。所以我的问题是,如果我使用ajax.beginform(),它是否会生成类似@ html.beginform的令牌?如果是这样,如何将其与我的ajax方法一起使用?

请忽略视图中的长代码。我主要关心的是ajax方法。我发布了该视图是为了向您展示在使用beginForm()的情况下的视图。

@*@Html.AntiForgeryToken()*@
<hr />
<div class="row">
    <div class="col-lg-6">
        <label><strong>Month:</strong></label>
    </div>
    <div class="col-lg-6">
        <label>@manning_HQ.Issue_Date</label>
    </div>
</div>
<div class="row">
    <div class="col-lg-6">
        <label><strong>Count:</strong></label>
    </div>
    <div class="col-lg-6">
        <label>@manning_HQ.Count</label>
    </div>
</div>
<div class="row">
    <div class="col-lg-6">
        <label><strong>Location:</strong></label>
    </div>
    <div class="col-lg-6">
        <label>@manning_HQ.Location_Name</label>
    </div>
</div>


<hr />
<div class="col-lg-4">
    <label>Recruitment Status :</label>
</div>
<div class="col-lg-3">
    <select id="recruitment_Status">
        <option value="0">
            Choose Status
        </option>
        @foreach (TBL_Recruitment_Status rec in recruitment_Status)
        {
            <option  value="@rec.Rec_Status_ID">
                @rec.Status_Name
            </option>
        }
    </select>
</div>
<div class="row">

    <div class="col-lg-12">

        <label><strong>Issue staff requisition:</strong></label>
    </div>
</div>
<div class="row">
    <div class="col-lg-6">
        <input type="radio" name="Decision" id="_123" value="Accepted" />
        Accepted
    </div>
    <div class="col-lg-6">
        <input type="radio" name="Decision" id="_456" value="Rejected" />
        Rejected
    </div>
</div>
<hr />

<div class="row" id="RejComment" hidden>
    <div class="col-lg-6">
        <label>Rejected Comment :</label>
    </div>
    <div class="col-lg-3">
        <textarea id="RetainedComment"></textarea>
    </div>
</div>
<br />

<div class="modal-footer" id="Save_Dicision" hidden>
    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
    <button type="button" class="btn btn-primary" onclick="saveDecision(@manning_HQ.Issue_Staff_ID)">Save</button>
</div>

<script>
    var DecesionCheck = false;
    var rejected = false;
    var reason = false;

    $(document).ready(function () {
        $('input[type=radio][name=Decision]').change(function () {
            if ($("input[name='Decision']:checked").val() == 'Accepted') {
                $('#RejComment').hide();
                $('#Save_Dicision').show();
                rejected = true;
            }
            if ($("input[name='Decision']:checked").val() == 'Rejected') {
                $('#RejComment').show();
                $('#Save_Dicision').show();

                rejected = true;
            }
        });
    });
    function saveDecision(ID) {
        var Decsion = $('input[name=Decision]:checked').val();
        var Reason = $('#recruitment_Status').val();
        //var token = $("[name='__RequestVerificationToken']").val();
        if (Decsion == "#_123") {
            if (DecesionCheck == true) {
                var Decsion = $('input[name=Decision]:checked').val();
                var optionalComment = $('#OptionalComment').val();
                $.ajax({
                    type: 'POST',
                    url: '/Staff_Requisition_HQ/Recruitment_Actions', 
                    data: {
                       // __RequestVerificationToken: token,
                        Issue_Staff_ID: ID,
                        Rec_Status_ID: Reason,
                        OpComment: RetainedComment,
                        RecDecison: Decsion,
                    },
                    success: function (result) {
                        $('#DescionDetailsPOPUP').modal('hide');
                        location.reload();
                    },
                    fail: function (xhr, textStatus, errorThrown) {
                        alert('request failed');
                    }
                });
            }


        }
        else {

            var Decsion = $('input[name=Decision]:checked').val();
            var RetainedComment = $('#RetainedComment').val();

            $.ajax({
                type: 'POST',
                url: '/Staff_Requisition_HQ/Recruitment_Actions',
                data: {
                    //__RequestVerificationToken: token,
                    Issue_Staff_ID: ID,
                    Rec_Status_ID: Reason,
                    Comment: RetainedComment, 
                    RecDecison: Decsion,

                },
                success: function (result) {
                    $('#DescionDetailsPOPUP').modal('hide');
                    location.reload();
                },
                fail: function (xhr, textStatus, errorThrown) {
                    alert('request failed');
                }
            });
        }

    }

</script>
javascript asp.net-mvc asp.net-ajax csrf
1个回答
0
投票

这是我的一种观点的Ajax.BeginForm示例:

<!-- FORM Atributo -->
@using (Ajax.BeginForm(accionFormulario, "Atributos", new AjaxOptions() { OnSuccess = "onSuccessCreate" }, new { @id = "frmCreate" }))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(model => model.AtributoId)
    @Html.HiddenFor(model => model.EmpresaId)

    <div class="modal-body">
        <div class="row">
            // the form inputs ....
        </div>
    </div>

    <div class="modal-footer">
        <button class="btn btn-secondary mx-1" type="button" data-dismiss="modal" aria-label="Close">@Global.Cancelar</button>
        <button class="btn btn-primary" type="submit"><strong>@Global.Guardar</strong></button>
    </div>
}

这将按预期生成AntiForgeryToken:enter image description here

您可以像在视图中一样使用javascript捕获它。

© www.soinside.com 2019 - 2024. All rights reserved.