MVC 3 Razor - Ajax.BeginForm OnSuccess - PullRequest
       5

MVC 3 Razor - Ajax.BeginForm OnSuccess

3 голосов
/ 08 февраля 2011

Я новичок в MVC и пытаюсь обновить свою страницу после отправки формы;но это не работаетЯ только пытаюсь скрыть форму и показать содержимое div OnSuccess.

Мой код:

<script type="text/javascript">
    $(document).ready(function () {
        $('#confirmation').hide();
    });

    function MessageConfirmation() {
        $('#confirmation').show('slow');
        $('#contactForm').hide('slow');
    }

</script>

@using (Ajax.BeginForm("Index", new AjaxOptions { OnSuccess = "MessageConfirmation" }))
{
<fieldset id="contactForm">
    <legend>Message</legend>
    <p>
        @Html.Label("Email", "Email"): @Html.TextBox("Email")
    </p>
    <p>
        @Html.Label("Subject", "Subject"): @Html.TextBox("Subject")
    </p>
    <p>
        @Html.Label("Message", "Message"): @Html.TextArea("Message")
    </p>
    <p>
        <input type="submit" value="Send" />
    </p>
</fieldset>

<p id="confirmation" onclick="MessageConfirmation()">
    Thanks!!!
</p>
}

Любые альтернативные решения / идеи приветствуются.

Заранее спасибо!

Ответы [ 4 ]

7 голосов
/ 08 февраля 2011

Не работает - это описание проблемы, которое больше подходит людям, которые не знают / не заботятся о том, как работает компьютер, а не разработчикам программного обеспечения. Разработчики программного обеспечения обычно точно описывают проблему, с которой они сталкиваются. Они публикуют точное сообщение об ошибке / трассировку стека исключений, которое они имеют.

Как говорится, вы просите альтернативных решений, вот мое: не используйте MS Ajax.* helpers, используйте jquery напрямую и ненавязчиво, как это

<script type="text/javascript">
    $(function () {
        $('#confirmation').hide();
        $('form').submit(function() {
            $('#confirmation').show('slow');
            $(this).hide('slow');
            return false;
        });
    });
</script>

@using (Html.BeginForm())
{
    <fieldset id="contactForm">
        <legend>Message</legend>
        <p>
            @Html.Label("Email", "Email"): 
            @Html.TextBox("Email")
        </p>
        <p>
            @Html.Label("Subject", "Subject"): 
            @Html.TextBox("Subject")
        </p>
        <p>
            @Html.Label("Message", "Message"): 
            @Html.TextArea("Message")
        </p>
        <p>
            <input type="submit" value="Send" />
        </p>
    </fieldset>
}

<p id="confirmation">
    Thanks!!!
</p>

Обратите внимание, как абзац confirmation был выведен из формы.

3 голосов
/ 08 февраля 2011

Вы уверены, что у вас есть все правильные файлы js, на которые есть ссылки в вашем проекте? В MVC3 они отошли от файлов MS Ajax. Если я правильно помню - ненавязчивый javascript должен быть включен по умолчанию, поэтому вы должны ссылаться на следующие файлы: jquery.js, jquery.validate.js, jquery.valudate.unobtrusive.js, jquery.unobtrusive-ajax.js

С этими ссылками на файлы - у вас все будет в порядке.

P.S. Есть очень хорошая запись в блоге Брэда Уилсона, объясняющая детали ненавязчивого ajax в MVC3 и как все это работает. Проверьте это здесь: http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html

0 голосов
/ 12 апреля 2012

Вы можете использовать триггер JQuery

$("#confirmation").trigger('click');

Поскольку у вас есть метод onclick для div

0 голосов
/ 20 мая 2011

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

Ненавязчивые функции также должны быть включены, и вы должны добавить в ненавязчивые скрипты AJAX MVC для MVC 3 и бритвы.

НТН.

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