如何在Ajax.BeginForm和OnSuccess之间获取事件?

时间:2017-09-02 15:16:54

标签: jquery ajax asp.net-mvc razor ajaxform

我有一个表单,我使用Ajax.BeginForm提交。我想做以下事情:

  1. 提交包含所有数据的表单(使用Ajax.BeginForm
  2. 在我们等待控制器时,做一些工作 - 包括截断我的textarea
  3. 当控制器完成后(使用OnSuccess),再做一些事情
  4. 然而,虽然1)和3)完美地工作,但我不知道访问#2的方式。我尝试在表单上使用JavaScript事件submit,但似乎此事件发生之前,所以如果我清空我的textarea,控制器永远不会看到这个填充值。

    我的剃刀:

        @using (Ajax.BeginForm("CreateNotification", "Task",null, new AjaxOptions() {HttpMethod = "POST", OnSuccess= "newMessage" },new {id="conv_form"}))
        {
            @Html.HiddenFor(c => c.ConversationId)
    
            <div class="form-group">
                @Html.TextAreaFor(c => c.New_Message, new {@class = "form-control conversation-box"})
            </div>
    
            <input type="submit" value="Send message" id="conversation_message_submit" class="btn btn-link pull-right" style="color: black; padding-right: 0px; font-size: 12pt;"/>
    
        }
    

    我也有我的jQuery:

    <script>
        $(document).ready(function() {
            /// Here I plan to truncate my textarea + other stuff
            $('#conv_form').submit(function () {
                console.log('conv_form submit');
            });
        });
    
        function newMessage(data) {
            console.log('newmessage fired');
    
        }
    </script>
    

    所以我的挑战是,对于我的submit事件,如果我操纵字段,这将改变我们发送给控制器的内容。我想访问发送到控制器和OnSuccess之间的事件。

2 个答案:

答案 0 :(得分:2)

您可以使用ajaxStart执行第2步,如下所示:

$(document).ajaxStart(function() {
   // do step 2
});

ajaxStart()方法指定在AJAX请求启动时要运行的函数。自jQuery version 1.9开始,此方法只应附加到document。有关详细信息,请参阅this

答案 1 :(得分:1)

你可以试试ajaxStart

 $('#conv_form').submit(function () {
        console.log('conv_form submit');
    });
}).ajaxStart(function(){
      //DoYourStuff
    })
    .ajaxStop(function(){
        //Stop Your Stuff
    });