JQuery Form Post не отправляет FormCollection в MVC Controller - PullRequest
1 голос
/ 12 января 2010

Я пытаюсь изменить данные в PartialView в моем представлении через изменение выпадающего списка в форме. Теперь, если я нажму кнопку «Отправить», моя форма отправит сообщение без проблем, и форма коллекции будет доступна, однако, когда я пытаюсь отправить с помощью jquery событие изменения, форма отправляется нормально, но нет коллекции формы.

Есть идеи?

Это код подачи

$(function() {
            $('#ddlSelection').change(function() {
                var form = $("#myForm");
                var action = form.attr("action");
                var serializedForm = form.serialize();
                $.post(action, serializedForm, function() { alert("Finished!") });
            });
        });

форма как таковая

    <% using (Ajax.BeginForm("myForm", new AjaxOptions
            {
                UpdateTargetId = "divItemsList",
                OnComplete = "ClearForm"
            }))
       {%>


        <%=Html.Label("ddlFilter", "Parent Filter")%>
        <%=Html.DropDownList("ddlFilter", "Please Select ...")%><br />



        <fieldset>
            <legend>Filter Option Details</legend>
            <p>
                <label for="Value">Value:</label>
                <%= Html.TextBox("Value") %>
                <%= Html.ValidationMessage("Value", "*") %>
            </p>
        </fieldset>
<%}%>

РЕШЕНИЕ Хорошо, следовало бы уделить больше внимания, тег Ajax.Beginform не дает форме идентификатор или имя, я предполагаю, что они считают это ненужным, поэтому решение заключается в добавлении атрибутов htmlattributes вручную. как так ..

<% using (Ajax.BeginForm("TheAction", null, new AjaxOptions
            {
                UpdateTargetId = "divFilterItemsList",
                OnComplete = "ClearForm"
            }, new { ID = "myForm", Name = "myForm" }))
       {%>

Ответы [ 2 ]

3 голосов
/ 12 января 2010

Документация jQuery говорит

Для правильной работы сериализации необходимо, чтобы поля формы имели атрибут name. Наличие только идентификатора не будет работать

Я бы проверил, чтобы все ваши элементы формы имели атрибут name.

1 голос
/ 12 января 2010

Я видел, как form.serialize работает, если у вас есть такие вещи, как вложенные формы (которых следует избегать). Вы всегда можете попробовать:

var serializedForm = $("#myForm input, #myForm select, #myForm textarea").serialize();

Чтобы узнать, является ли проблема сериализацией формы или фактическим сообщением.

И чтобы быть параноиком, ваша форма имеет идентификатор "myForm", когда вы смотрите на источник HTML, а не просто название этого права?

Изменить после публикации ASP-кода: Почему бы не изменить свой JS на:

$(function() {
    $('#ddlSelection').change(function() {
        $("#myForm").submit();
    });
});

Я не осознавал, что вы уже используете форму ajax из .net. Должен быть в состоянии вызвать обычную отправку для формы и заставить ее работать нормально.

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