Передача объекта из JsonResult в другую функцию в jQuery

#jquery #ajax #asp.net-mvc #vb.net

#jquery #ajax #asp.net-mvc #vb.net

Вопрос:

Как я могу передать объект (или идентификатор моего объекта) моего Jsonresult другой функции в jQuery? У меня все работало, когда мои Actionresults возвращали представления или другие действия, но теперь мне нужно все изменить, чтобы оно работало в модальном режиме, и я не могу пройти первый шаг.

Мой jQuery:

 $(document).ready(function () {
var registerEmailBtn = $("#registerEmailBtn");

registerEmailBtn.click(function (e) {
    e.preventDefault();
    SaveEmailAddress();
    $("#step1").addClass("d-none");
    $("#step2").removeClass("d-none");

});

});


function SaveEmailAddress() {
var user = {
    ID: $("#emailId").val(),
    Email: $("#emailField").val()
};

$.ajax({
    type: "POST",
    contentType: "application/json; charset=UTF-8",
    url: "/api/UserManagement/Register",
    data: JSON.stringify(user),
    dataType: "json",
    success: function (response) {
        console.log(response);
    }
});
}
  

Когда я проверяю консоль, объект с данными, возвращенными с моего контроллера, находится там.

Функция контроллера:

     Function Register(user As User) As JsonResult
        user.ConfirmationCode = codeGenerator.CreateConfirmationCode()
        Dim id = _userData.AddEmailAddressLastId(user)
        user.ID = id
        Return Json(user)
    End Function
  

Консоль вывода:

Вывод на консоль

Следующим шагом должно быть подтверждение кода, методы работают, когда я возвращаю представления из actionresults, но, похоже, я не могу понять, как передать идентификатор моего объекта приведенным ниже методам.

     <HttpGet>
    Function GetConfirmCode(Optional ByVal id As Integer = 0) As JsonResult
        Dim user As New User
        If id > 0 Then
            user = _userData.GetUserByID(id)
            user.ConfirmationCode = ""
        End If
        Return Json(user)
    End Function

    <HttpPost>
    Function ConfirmCode(Optional user As User = Nothing) As JsonResult
        Dim enteredCode = user.ConfirmationCode
        Dim givenCode = _userData.GetConfirmationCode(enteredCode)

        If String.IsNullOrEmpty(givenCode) Or String.IsNullOrWhiteSpace(givenCode) Then
            TempData("ErrorMessage") = "Codes don't match"
            Return Json(user)
        End If

        user = _userData.GetUserWithConfirmationCode(givenCode)
        Return Json(New With {user.ID}, JsonRequestBehavior.AllowGet)

    End Function
  

Я просто хочу передать идентификатор из моей функции register в функцию confirmCode, чтобы я мог получить правильную запись из моей базы данных. Я пробовал использовать скрытые поля, но, похоже, не могу их заполнить.

HTML:

   @Using Html.BeginForm()

            @<div id="step1">
                @Html.HiddenFor(Function(m) m.ID, New With {.id = "emailId"})
                @Html.TextBoxFor(Function(m) m.Email, New With {.id = "emailField"})
                <button class="mybtn-sm color-btn-default" id="registerEmailBtn">Volgende</button>
                <div class="code-link">
                    <a href="#">Ik heb al een uitnodigingscode ontvangen</a>
                </div>
            </div>
        End Using

        @Using Html.BeginForm()
            @<div id="step2" class="d-none">
                @Html.HiddenFor(Function(m) m.ID, New With {.id = "idField"})
                @Html.TextBoxFor(Function(m) m.Email, New With {.id = "checkEmail"})
                @Html.TextBoxFor(Function(m) m.ConfirmationCode, New With {.id = "confCodeField"})
                <button class="mybtn-sm color-btn-default" id="confCodeBtn">Volgende</button>
            </div>
        End Using
        <div class="login-socials">
            <div class="title">
                <h3>Aanmelden met</h3>
            </div>
            <div class="social-links">
                <div class="social-link-item"><p><i class="fab fa-facebook"></i>amp;nbsp;Facebook</p></div>
                <div class="social-link-item"><p><i class="fab fa-google"></i>amp;nbsp; Google</p></div>
                <div class="social-link-item"><p><i class="fab fa-linkedin"></i>amp;nbsp; linkedin</p></div>
            </div>
        </div>
        @*<a href="#" rel="modal:close">Close</a>*@
    </div>
</div>
  

Комментарии:

1. Вы имеете в виду, что хотите передать результат, скажем, код подтверждения другому методу контроллера?

2. @Adlorem, я хочу передать идентификатор из моего результата JSON в качестве параметра методу ConfirmCode. Этот метод Get принимает необязательный int в качестве параметра, который извлекает код подтверждения из базы данных от пользователя с идентификатором. Из моего примера ID 71 должен быть параметром для метода ConfirmCode контроллера.

Ответ №1:

Я изменил метод Register на своем контроллере, чтобы возвращать идентификатор как int вместо самого объекта. В функции успеха вызова ajax я устанавливаю значение скрытого поля в значение int, которое было передано. В следующем методе ConfirmCode я использовал значение скрытого поля в качестве параметра и модифицировал метод post, чтобы также выполнять проверку Id вместо использования httpget и httppost.