Недопустимый примитив JSON в записи - PullRequest
0 голосов
/ 25 августа 2018

Я знаю, что этот вопрос задавался несколько раз в Stakoverflow. Но ни одно из решений не помогает мне. Может кто-нибудь сказать мне, что было сделано неправильно

У меня есть действие контроллера, как показано ниже

<HttpPost()>
    Function WFUserEdited(ByVal userdetails As userdetails) As ActionResult
            Return View()
    End Function

И Моя Viewmodel похожа на

Public Class userdetails
    Public Property Username As String
    Public Property Password As String
    Public Property Fullname As String
    Public Property Location As String
    Public Property Appcode As String
    Public Property Userlevel As String
End Class

И Мой Jquery Ajax-вызов похож на ниже

 $("#btnSubmit").click(function () {
                var q = validate();
                if (q = true) {
                    var userdetails = {};
                    userdetails.UserName = $('#txtusername').val().toString();
                    userdetails.Password = $('#txtPassword').val().toString();
                    userdetails.Fullname = $('#txtfullName').val().toString();
                    userdetails.Location = $('#txt_location').val().toString();
                    userdetails.Appcode = $("#drp_appcode").chosen().val().toString();
                    userdetails.Userlevel = $("#drp_userlevel").chosen().val().toString();
                    userdetails = JSON.stringify(userdetails);
                    var url = '@Url.Action("WFUserEdited", "WFUser")';

                    $.ajax({
                        url: url,
                        type: 'POST',
                        traditional: false,
                        contentType: "application/json; charset=utf-8",
                        dataType: 'json',
                        data: { "userdetails": userdetails },
                        success: function (data) {
                        },
                        error: function (data) {
                        }
                    });
                }
            });
        });

И на Beamxecutecore iam получаю следующее исключение

 Protected Overrides Function BeginExecuteCore(callback As AsyncCallback, state As Object) As IAsyncResult
        Try
            ViewBag.UserImage = "http://_layouts/15/CaptarisWFTasksWebPart/EmployeeImages/sree.jpg"

        Catch generatedExceptionName As Exception
            Return MyBase.BeginExecuteCore(callback, state)
        End Try
        Return MyBase.BeginExecuteCore(callback, state)
    End Function

Исключение типа 'System.ArgumentException' произошло в System.Web.Mvc.dll, но не было обработано в коде пользователя. Дополнительная информация: Неверный примитив JSON: userdetails.

1 Ответ

0 голосов
/ 25 августа 2018

Когда вы указываете contentType: "application/json, вы должны преобразовать данные, отправленные вами в JSON.В вашем случае данные представляют собой javascript objec` (который содержит некоторые строковые данные), а не JSON.

Поскольку userdetails уже является строковым (с использованием JSON.stringify()), измените код Ajax на * 1006.*

$.ajax({
    url: url,
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    data: userdetails,
    success: function (data) {
        ...
});

Однако нет необходимости отправлять его как JSON.Вы можете использовать значение по умолчанию 'application/x-www-form-urlencoded; charset=UTF-8'

Удалить строку кода userdetails = JSON.stringify(userdetails);, а затем просто

$.ajax({
    url: url,
    type: 'POST',
    dataType: 'json',
    data: userdetails,
    success: function (data) {
        ...
});

Примечание. В обоих случаях вы можете опустить параметр traditional: false.

И если вы правильно сгенерировали элементы управления формы, используя методы HtmlHelper для привязки к свойствам модели, вам не нужно вручную создавать object.Вы можете просто использовать .serialize().Кроме того, вы должны обрабатывать событие отправки форм, а не событие нажатия кнопки, и проверять .valid()

$('form').submit(function(e) {
    e.preventDefault();
    if (!$(this).valid()) {
        return;
    }
    var userdetails = $(this).serialize();
    var url = '@Url.Action("WFUserEdited", "WFUser")';
    $.ajax({
        url: url,
        type: 'POST',
        dataType: 'json',
        data: userdetails,
        success: function (data) {
            ...
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...