Вопрос по asp.net-mvc-3, jquery, actionmethod – $ .post легче кодировать, но с .ajax вы получаете большую глубину конфигурации, обработки ошибок, ..

2

м проекте ASP.net mvc3 я использую ajax-вызов для отправки данных json в метод создания действий в контроллере Company. Но когда я отлаживаю вызов ajax, он всегда заканчивается результатом ошибки, а не результатом успеха.

вызов ajax:

$.ajax({
            url: '/Company/Create',
            type: 'POST',
            data: JSON.stringify(CreateCompany),
            dataType: 'Json',
            contentType: 'application/json; charset=utf-8',
            success: function () {
                alert('ajax call successful');
            },
            error: function () {
                alert('ajax call not successful');
            }
        });

Мой метод действий в контроллере компании:

    [HttpPost]
    public ActionResult Create (Company company)
    {
        try
        {
            //Create company
            CompanyRepo.Create(company);
            return null;
        }
        catch
        {
            return View("Error");
        }
    }

Я уже отладил метод действия, но он завершает его так, как должен. Таким образом, данные, отправленные с помощью вызова ajax, будут обработаны и записаны в базу данных. (метод действия не использует часть catch).

Почему мой вызов ajax по-прежнему выдает сообщение «вызов ajax не выполнен»?

Вы пробовали отладку с помощью Firebug, чтобы увидеть, что на самом деле происходит за кулисами с процессом запрос / ответ? Gup3rSuR4c

Ваш Ответ

3   ответа
0

Разве это не будет проще:

$.post("/Company/Create", function (d) {
    if (d.Success) {
        alert("Yay!");
    } else {
        alert("Aww...");
    }
}, "json");

И в вашем контроллере.

[HttpPost]
public JsonResult Create(
    [Bind(...)] Company Company) { <- Should be binding
    if (this.ModelState.IsValid) { <- Should be checking the model state if its valid
        CompanyRepo.Create(Company);

        return this.Json(new {
            Success = true
        });
    };

    return this.Json(new {
        Success = false
    });
}
$ .post легче кодировать, но с .ajax вы получаете большую глубину конфигурации, обработки ошибок, .. Thomas
4

я сделал, так это установил dataType на "text json" :)) Если это не поможет, попробуйте получить дополнительную информацию, узнав подробности вашей ошибки, т.е.

$.ajax({
        url: '/Company/Create',
        type: 'POST',
        data: JSON.stringify(CreateCompany),
        dataType: 'text json',
        contentType: 'application/json; charset=utf-8',
        success: function () {
            alert('ajax call successful');
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
        }
    });

Кстати, я нашел это решение где-то на StackOverflow

Я потратил довольно много времени, когда впервые искал ответ. Рад, что смог помочь :) Julian S
невероятно, что это сильно меняется! Я изменил тип данных на «text json», и теперь он дает мне функцию в части успеха. Thomas
1

Почему ты возвращаешьсяnull в случае успеха в вашем действии контроллера? Верните что-нибудь к успеху, например, объект JSON (особенно, как вы указали в своем запросе AJAX, что ожидаете ответа JSON от сервера - с помощьюdataType: 'json' настройка - которая должна быть в нижнем регистреj Кстати):

return Json(new { success = true });
То, что вы сказали, и я думаю,contentType Часть вызова Ajax также бессмысленна. Кроме того, если есть{success = true} для попытки, то должно быть{success = false} для улова, и, следовательно, все действие может быть помечено какJsonResult. Gup3rSuR4c

Похожие вопросы