Ajax.BeginForm не вызывает onSuccess - PullRequest
5 голосов
/ 02 сентября 2011

В приложении ASP.NET MVC 3 я использую Ajax.BeginForm для отправки записанного текста в контроллер.

@using (Ajax.BeginForm("Post", "Forum", new {threadId = Model.Thread.Id  }, new AjaxOptions { OnSuccess = "PostReply" }))
{
    <div id="reply-area">
        <h3 style="border-bottom:1px solid black">POST REPLY</h3>

        <span id="post-error" class="error-message"></span>
        <textarea rows="1" cols="1" id="post-textarea" name="Content">    </textarea>

         <input type="submit" class="button" value="Submit"/>

     </div>
}

В контроллере у меня есть

 [HttpPost]
 public ActionResult Post(int threadId,PostModel model)
 {
     bool Success = false;
     if (ModelState.IsValid)
     {
        Success=Unit.ForumFacade.CreatePost(Unit.ForumFacade.GetThreadByID(threadId), model.Content,  CurrentUserId);
        if (Success == true) return View("PostSuccess");
    }

    return Json("fsdfds");
}

И в JavaScript у меня есть это

function PostReply(isRequestSuccessed) {
    alert("asdasd");
    if (isRequestSuccessed==false) {
        $("#post-error").html("Please Try Again");
    }
    else
    {
        $("#post-error").html("");
    }
}

Проблема в том, что функция Javascript не срабатывает и вместо предупреждения, мой браузер (Firefox) возвращает мне всплывающее окно для загрузки файла приложения / json. Что здесь не так?

Ответы [ 4 ]

20 голосов
/ 02 сентября 2011

Убедитесь, что вы включили следующий скрипт на свою страницу:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

и что вы включили ненавязчивый JavaScript в вашем файле web.config:

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

Это то, что заставляет Ajax.* помощников, таких как Ajax.BeginForm, работать.

3 голосов
/ 22 января 2016

Спасибо "Дарину Димитрову" и его ответу за много указаний на этот счет. Но, просто добавляя к этому, я знаю, что это может быть просто, но это заставило меня

Моя ошибка была в том, что я думал

jquery.validate.unobtrusive.js

и

 jquery.unobtrusive-ajax.js

, где то же самое, когда они не. Убедитесь, что вы используете "jquery.unobtrusive-ajax.js", найденный в Nuget.

Microsoft.jQuery.Unobtrusive.Ajax

0 голосов
/ 13 ноября 2014

вот лучшее решение, которое я нашел 100% исправить ..

http://www.learnsharecorner.com/asp-net/ajax-begin-form-onsuccess-is-not-working-asp-net-mvc/

0 голосов
/ 02 сентября 2011

Это гораздо более приятное решение, когда вы даете своей форме идентификатор, а затем присоединяете событие отправки в отдельном файле javascript (используя jQuery) и обрабатываете там сообщение

html:

@using (Ajax.BeginForm("Post", "Forum", new {threadId = Model.Thread.Id  }, new {id = "formid" }))
{
 ...

Javascript:

$("#formid").submit(function (e) {
    e.preventDefault();
    if ($(this).valid()) {
        $.ajax({
            type: "POST",
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function (result) {
                //do your success logic
            }
        });
    }
});
...