jquery Post не работает в asp.net MVC 3? - PullRequest
0 голосов
/ 28 сентября 2011

Я только что скопировал некоторый код из приложения asp.net mvc 2, которое работает.Теперь я пытаюсь это в asp.net MVC 3, и он не вызывает метод сохранения на контроллере?

контроллер:

 [HttpPost]
    public JsonResult save(string inputdata)
    {
        return Json(new { Result = string.Format("From the controller - you have clicked the GO-button ! ") }, JsonRequestBehavior.AllowGet);
    }

view:

<button id="but">go</button>
<div id=result></div>
<script type="text/javascript">

    $(document).ready(

    $("#but").click(
        function () {
            $.ajax({
                url: "/Home/save",
                dataType: "json",
                type: 'POST',
                data: "test",
                success: function (result) {
                    $("#result").html(result.Result);
                }
            });

        }
    )

    );

</script>

1 Ответ

3 голосов
/ 28 сентября 2011

Вы не передаете данные правильно. Аргумент действия называется inputdata. Поэтому вы должны использовать это же имя в хеше data запроса AJAX:

$.ajax({
    url: '/Home/save',
    dataType: 'json',
    type: 'POST',
    data: { inputdata: 'test' },
    success: function (result) {
        $('#result').html(result.Result);
    }
});

Также никогда не указывайте в своем javascript URL-адреса жестким кодом, всегда используйте помощники url, иначе ваше приложение просто перестанет работать при развертывании из-за возможности иметь имя виртуального каталога:

$.ajax({
    url: '@Url.Action("save", "home")',
    dataType: 'json',
    type: 'POST',
    data: { inputdata: 'test' },
    success: function (result) {
        $('#result').html(result.Result);
    }
});

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

Также вам не нужно указывать dataType для JSON, поскольку jQuery достаточно умен, чтобы вывести это из заголовка ответа Content-Type, отправленного с сервера.

Таким образом, окончательная версия должна выглядеть примерно так:

<script type="text/javascript">
    $(function() {
        $('#but').click(function () {
            $.ajax({
                url: '@Url.Action("save", "home")',
                type: 'POST',
                data: { inputdata: 'test' },
                success: function (result) {
                    $('#result').html(result.Result);
                }
            });
            return false;
        });
    });
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...