не может передать данные из контроллера для просмотра на AJAX - PullRequest
0 голосов
/ 16 февраля 2019

Моя проблема с AJAX.(asp.net mvc) Попытка передачи данных с контроллера для просмотра;но есть ошибка: «Не удалось загрузить ресурс: сервер ответил со статусом 500 (Внутренняя ошибка сервера)»

Нет проблем при сохранении на сервер.Но я не могу достичь «тревоги» в моем кодеМой код:

КОНТРОЛЛЕР

[HttpPost]
    public JsonResult Asker(Question q)
    {
        db.Users.FirstOrDefault(x => x.UserId == 1).Questions.Add(q);

        db.SaveChanges();

        return Json(q);
    }

ПРОСМОТР

<script>
    $( function()
    {
        $("#ask-btn").click(function () {

            var q = {};
            q.Que = $("#ask-txt").val();
            $.ajax({
                type: "POST",
                url: "/SomebodysPage/Asker",
                data: '{q: ' + JSON.stringify(q) + '}',
                contentType: "application/json; charset=utf-8",
                success: function (response) {
                    alert("It's alright.");
                },
            });
        });
    })
</script>

Мой вопрос Класс:

public class Question
{
    public int QuestionId { get; set; }

    public string Que { get; set; }

    [ForeignKey("User")]
    public int UserId { get; set; }
    public virtual User User { get; set; }

    public virtual Answer Answer { get; set; }

}

1 Ответ

0 голосов
/ 16 февраля 2019

Я думаю, что проблема в данных, которые вы отправляете с AJAX.Попробуйте этот вызов ajax

<script>
    $( function()
    {
        $("#ask-btn").on('click', function () {

            var dataToSend = $("#ask-txt").val();
            $.ajax({
                type: "POST",
                url: "/SomebodysPage/Asker",
                data: {question: JSON.stringify(dataToSend) },
                contentType: "application/json;",
                success: function (response) {
                    if(response) { alert("It's alright."); }
                    else { console.log(response); }
                },
                error: function(response) {
                   console.log(response);
                }
            });
        });
    })
</script>

Кроме того, поскольку вы передаете строку JSON, контроллер ожидает строку, а не объект типа Question.Вы должны десериализовать строку в объект типа Question примерно так:

   [HttpPost]

    public JsonResult Asker(string question)
    {
       Question q = new Question();
       JavaScriptSerializer json_serializer = new JavaScriptSerializer();
       try {
            //try to convert string to an object of type Question
            q = (Question)json_serializer.DeserializeObject(question);
        }
        catch(Exception e) {
            return Json(q);
        }
        //Now we have an object of type Question from the json
        db.Users.FirstOrDefault(x => x.UserId == 1).Questions.Add(q);

        db.SaveChanges();

        return Json(q);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...