MVC3 Razor Ajax Форма Отправить - PullRequest
       1

MVC3 Razor Ajax Форма Отправить

6 голосов
/ 30 августа 2011

Я использую помощник MVC3 для создания моей формы Ajax, например:

@using (Ajax.BeginForm("Attended", "Lesson", new AjaxOptions
               {
                   HttpMethod = "GET",
                   InsertionMode = InsertionMode.InsertAfter,
                   UpdateTargetId = "mdl" + item.ID
               }))
            {
                @Html.HiddenFor(modelItem => item.ID);
                @Html.CheckBox("Attended", item.Attended, new { OnChange = "javascript:this.form.submit()"});
            }

Я просто не могу найти правильный способ отправки формы для события checkbox.Я не хочу, чтобы мои пользователи нажимали кнопку отправки.

Атрибут HTMLA работает, но при изменении происходит обратная передача вместо запроса ajax.

Кто-нибудь знает ответ?

Ответы [ 5 ]

9 голосов
/ 30 августа 2011

Сначала создайте кнопку отправки внутри формы и скройте ее, установив атрибут style="display:none;". Затем вместо использования this.form.submit() в событии onchange используйте следующее:

$(this).parents('form:first').find(':submit')[0].click();

Это вызовет скрипт jquery.unobtrusive-ajax.js и завершит отправку Ajax.

2 голосов
/ 28 ноября 2011

это может помочь

@Html.CheckBox("Attended", item.Attended, new { OnChange = "submitForm"});

function submitForm(e)
{
    document.forms[0].submit();
}
1 голос
/ 30 августа 2011

А как насчет использования jQuery для запуска отправки? Как и в этом ответе Как опубликовать форму ASP.NET MVC Ajax с помощью JavaScript вместо кнопки отправки

При использовании события .change () вместо события .click () часть jQuery будет выглядеть примерно так:

$(function() {
    $('form#ajaxForm').find('input.submit').change( function() {
         $('form#ajaxForm').trigger('submit');
    });
}
@using (Ajax.BeginForm("Attended", "Lesson", new { id = Model.Id }, new AjaxOptions
        {
           HttpMethod = "GET",
           InsertionMode = InsertionMode.InsertAfter,
           UpdateTargetId = "mdl" + item.ID
        }, new { id = "ajaxForm" } ))
{
   @Html.HiddenFor(modelItem => item.ID);
   @Html.CheckBox("Attended", item.Attended, new { @class = "submit"});
}

Это абсолютно непроверенный код, поэтому остерегайтесь опечаток:)

0 голосов
/ 24 сентября 2012

Хм, что действительно работало для меня, даже на сотовых телефонах, которые были проблемной областью, было следующим, в моем файле cshtml для частичного просмотра.Он также включает в себя код, который выделяет кнопку серым цветом и пишет «Сохранение ...» до тех пор, пока просмотр не отправит назад, что позволяет избежать нажатия на кнопку «Отправить», когда им не терпится работать на медленных серверах SQL.

    <input id="submitFutureDayEditVisibleButton" type="button" value="Save Changes" />
    <input id="submitFutureDayEditHiddenButton" style="display:none;" type="submit" value="SC" />

        <div id="myUserMessage">    
            @if (Model.UserMessage != null)
            { @Model.UserMessage }
        </div>

    <input type="hidden" id="bUnsavedChanges" name="bUnsavedChanges" value="false" />
 }
</div>  

<div id="hahuloading">
    <div id="hahuloadingcontent">
        <p id="hahuloadingspinner">
            Saving...
        </p>
    </div>
</div>
0 голосов
/ 30 августа 2011

Формы являются классическим способом отправки запроса - поэтому это POST - ваша настройка GET отменяется настройкой onChange - отправка всегда очищает содержимое и заменяется содержимым сервера - я делаю некоторый JavaScript для отправки с использованием AJAX - не могу видите, так что я предполагаю, что это именно так. ваш OnChange должен вместо этого выполнить эту функцию AJAX ...

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