JQuery формы сообщения Вопросы - PullRequest
0 голосов
/ 21 июля 2011

Я использую asp.net MVC, и у меня возникла проблема с отправкой формы с использованием jquery. Это не отправка на URL, который я говорю. Если я использую firebug, это показывает, что сообщение происходит, но оно отправляет в индекс контроллера каждый раз. Я не могу понять, почему. Я проверил URL-адрес действия, которое пытаюсь опубликовать, но не могу понять, почему оно всегда публикуется в индексе контроллера .... Примечание: представление, в котором находится форма, является представлением индекса. так что, в основном, он публикует свое собственное действие, а не то, в URL которого я говорю. Любая помощь будет отличной. спасибо!

вот моя форма

 <form  action='' id="descriptionForm">
<%=Html.Hidden("claimNumber", ViewData["claimNumber"])%>
<%=Html.Hidden("partNumber", ViewData["partNumber"])%>
<%=Html.Hidden("qty", ViewData["qty"])%>
<table>
    <tr>
        <td style="text-align: right">
            Category:
        </td>
        <td>
            <%=Html.DropDownList("problemCategory", (IEnumerable<SelectListItem>)ViewData["problemSelect"], "-Select-")%>
        </td>
    </tr>
    <tr>
        <td style="text-align: right">
            Details:
        </td>
        <td>
            <select id="problemDetails">
            </select>
        </td>
    </tr>
    <tr>
        <td style="text-align: right">
            Dealer Notes:
        </td>
        <td>
            <%=Html.TextArea("dealerNotes", "", 3, 40, null)%>
        </td>
    </tr>
</table>
<div style="position: absolute; bottom: 8px; right: 8px">
    <input type="button" id="itemDetailsCancel" value="Cancel" />
    <input type="submit" id="itemDetailsSubmit" value="Save" />
</div>
</form>
 <a href='<%=ResolveUrl("~/Warranty/WarrantyClaims/CompleteAddLineItemToClaim/") %>'
id="CompleteLineItemUrl"></a>

Вот мой Javascript

   $("#descriptionForm").submit(function () {
    var completeurl = $("#CompleteLineItemUrl").attr('href');
    var data = $(this).serialize();

    $.post({
        type:'POST',
        url: completeurl,
        data: data,
        success: function (result) {
            alert("done");
        }
    });
    return false
});

и просто для примера приведем действие контроллера, на которое я пытаюсь опубликовать (хотя пока оно мало что делает)

  [HttpPost]
    public ActionResult CompleteAddLineItemToClaim(string claimNumber, string partNumber, string qty, string problemCategory, string problemDetails, string dealerNotes)
    {
        var result = new { result = "done" };

        return Json(result, JsonRequestBehavior.AllowGet);
    }

Обновление: обновленный JavaScript

$(function(){

        $('#descriptionForm').submit(function () {
            var completeurl = $('#CompleteLineItemUrl').attr('href');
            var data = $(this).serialize();

            $.ajax({
                type: 'POST',
                url: completeurl,
                data: data,
                success: function (result) {
                    alert('done');
                }
            });
            return false;
        });

 });

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

Загружается ли сама форма при помощи вызова ajax?

Если это так, вам нужно использовать функцию live () jquery.

2 голосов
/ 21 июля 2011

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

Но ваша настоящая проблема в том, что вы хотите использовать $.ajax вместо $.post. Так что на самом деле происходит то, что вы получаете ошибку javascript из-за неправильного использования функции $.post, а обработчик .submit никогда не успевает return false и отменяет отправку формы по умолчанию, и браузер успешно переходит в POSTing для действие формы (которая пуста и по умолчанию соответствует действию, которое отображало эту форму).

Итак, подведем итог:

$(function() {
    $('#descriptionForm').submit(function () {
        var completeurl = $('#CompleteLineItemUrl').attr('href');
        var data = $(this).serialize();

        $.ajax({
            type: 'POST',
            url: completeurl,
            data: data,
            success: function (result) {
                alert('done');
            }
        });
        return false;
    });
});

Или, если вы хотите использовать $.post:

$(function() {
    $('#descriptionForm').submit(function () {
        var completeurl = $('#CompleteLineItemUrl').attr('href');
        var data = $(this).serialize();

        $.post(completeurl, data, function (result) {
            alert('done');
        });
        return false;
    });
});

Кроме того, вместо создания ссылок в классическом виде WebForms:

<a href='<%=ResolveUrl("~/Warranty/WarrantyClaims/CompleteAddLineItemToClaim/") %>' id="CompleteLineItemUrl"></a>

В ASP.NET MVC вы используете помощники HTML, чтобы убедиться, что URL-адреса ссылок соответствуют вашим маршрутам:

<%= Html.ActionLink(
    "Link text", 
    "CompleteAddLineItemToClaim", 
    "WarrantyClaims", 
    new { area = "Warranty" },
    new { id = "CompleteLineItemUrl" }
) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...