Как использовать $ .post с функцией onclick кнопки, а не с формой? - PullRequest
1 голос
/ 02 февраля 2011

Я хотел бы получить доступ к своему контроллеру при нажатии. Форма обратной передачи установлена ​​для другой функции. Я знаю, как разместить, если была форма. Есть ли способ перейти к контроллеру без использования формы, и если да, то как мне это сделать?

<% using (Html.BeginForm("OneMethod", "Home", FormMethod.Post, new { id = "formNext" })) { 
<input id="addContent" type="button" onclick="addContent(ind1, ind2)"/>
<% } %>

JQuery

function(addContent(ind1, ind2) {
    //post should go to "TwoMethod" and not "OneMethod" but not sure how...
    $.post($(this).attr("action"), $(this).serialize(), function(response) {
        //code
    }, 'json');
}

Ответы [ 3 ]

4 голосов
/ 02 февраля 2011

Вот хорошая функция, которую я написал для публикации в AJAX.

submitForm("home/twomethod", $("#formNext"),function(e){do stuff});

Какие звонки:

function sumbitForm(url, DetailsForm, SuccessCallBack)
{
    $.ajax({
        url: url,
        type: "POST",
        contentType: "application/x-www-form-urlencoded",
        dataType: "json",
        data: $(DetailsForm).serialize(),
        success: SuccessCallBack,
        error: MyNamespace.handleAjaxError
    });
}
3 голосов
/ 02 февраля 2011

да, вы просто делаете:

$("#some_ID_To_Button").click(function(){
$.post('/home/myaction', $("#formNext").serialize(), function(response) {
        //code
    }, 'json');
});

:)

0 голосов
/ 02 февраля 2011

Вы можете позвонить $ .ajax, указав, что собираетесь отправлять данные POST. Как видите, свойство url - это контроллер / действие, а данные - это набор полей / свойств, которые вы хотите отправить. Я использую здесь JSON, но вы можете выбрать другой путь.

url: '<%=Url.Action("DoSomething", "Home")%>',
data: { Name: $('#Field1').val(), MiddleName: $('#Field2').val(), Surname: $('#Field3').val() },

ВИД

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <input type="text" id="Field1" name="Field1" value="" /><br />
    <input type="text" id="Field2" name="Field2" value="" /><br />
    <input type="text" id="Field3" name="Field3" value="" /><br />
    <input type="button" id="post_data" name="post_data" value="Save" />

    <script type="text/javascript">
        $(document).ready(function() {

            $('#post_data').click(function() {

                $.ajax({
                    type: 'POST',
                    url: '<%=Url.Action("DoSomething", "Home")%>',
                    data: { Name: $('#Field1').val(), MiddleName: $('#Field2').val(), Surname: $('#Field3').val() },
                    dataType: 'json',
                    beforeSend: function(XMLHttpRequest) {
                        // You can do something before posting data.
                    },
                    complete: function(XMLHttpRequest, textStatus) {
                        var Response = $.parseJSON(XMLHttpRequest.responseText);
                        if ((XMLHttpRequest.responseText == 'false') || (Response.Status == false)) {
                            // FAIL
                        }
                        else {
                            // SUCCESS
                            alert(Response); // Should be true.
                        }
                    }
                });
            });


        });
    </script>

</asp:Content>

Мой контроллер возвращает логическое значение, но вы можете изменить его с помощью объекта.

CONTROLLER:

[HttpPost]
public JsonResult DoSomething(string Name, string MiddleName, string  Surname)
{
    return (Json(true, JsonRequestBehavior.DenyGet));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...