如何在表单提交后执行Javascript

如何在表单提交后执行Javascript,javascript,asp.net,asp.net-core,.net-core,Javascript,Asp.net,Asp.net Core,.net Core,我有一个Asp.Net核心应用程序,我正在提交这样一个表单: @using (Html.BeginForm("MyMethod", "Action", FormMethod.Post) { <button type="submit">RunMyMethod</button> } 有办法做到这一点吗?我在想,BeginForm可能有某种形式的回调选项(但我看不到)。我假设处理表单post的控制器方法返回一个视图模型。通过布尔

我有一个Asp.Net核心应用程序,我正在提交这样一个表单:

@using (Html.BeginForm("MyMethod", "Action", FormMethod.Post)
{
    <button type="submit">RunMyMethod</button>                    
}

有办法做到这一点吗?我在想,BeginForm可能有某种形式的回调选项(但我看不到)。

我假设处理表单post的控制器方法返回一个视图模型。通过布尔属性
RenderMyScript
扩展该视图模型,该属性指示应包含脚本。将其设置为true

然后,在视图中检查布尔值:

@if (Model.RenderMyScript)
{
  @section Scripts {
      function functionWorked() {
          alert('This worked!');
      }
  }
}

我假设处理表单post的控制器方法返回一个视图模型。通过布尔属性
RenderMyScript
扩展该视图模型,该属性指示应包含脚本。将其设置为true

然后,在视图中检查布尔值:

@if (Model.RenderMyScript)
{
  @section Scripts {
      function functionWorked() {
          alert('This worked!');
      }
  }
}

我不得不说,当表格提交时,你的页面被切换掉了。因此,在表单成功提交后,您永远无法在其上执行任何javascript

但是,您可以覆盖表单的提交事件

如果用户提交表单:

  • 阻止浏览器切换页面
  • 请自行提交数据
  • 触发你的成功方法
就像这样:(下面的javascript需要jQuery)

@节脚本{
$('form')。提交(函数(e){
e、 预防默认值();
$.ajax({
类型:$(this.attr('method'),
url:$(this.attr('action'),
数据:$(this).serialize(),
成功:功能(数据){
警惕(“这起作用了!”);
},
错误:函数(){
警报(“未知错误!”);
}
});
});
}

我不得不说,当表单提交时,您的页面被切换掉了。因此,在表单成功提交后,您永远无法在其上执行任何javascript

但是,您可以覆盖表单的提交事件

如果用户提交表单:

  • 阻止浏览器切换页面
  • 请自行提交数据
  • 触发你的成功方法
就像这样:(下面的javascript需要jQuery)

@节脚本{
$('form')。提交(函数(e){
e、 预防默认值();
$.ajax({
类型:$(this.attr('method'),
url:$(this.attr('action'),
数据:$(this).serialize(),
成功:功能(数据){
警惕(“这起作用了!”);
},
错误:函数(){
警报(“未知错误!”);
}
});
});
}

将表单转换为基于ajax的表单,用于处理onsuccess事件

@using (Ajax.BeginForm("Method", "Action", new AjaxOptions { OnSuccess ="onSuccess" }))
{
    <button type="submit">RunMyMethod</button>                    
}
@使用(Ajax.BeginForm(“方法”、“操作”、新的AjaxOptions{OnSuccess=“OnSuccess”}))
{
RunMyMethod
}
和Javascript/Jquery

<script type="text/javascript">
    function onSuccess(result) {
        alert("Success")
    }
</script>

函数onSuccess(结果){
警惕(“成功”)
}

将表单转换为基于ajax的表单,用于处理onsuccess事件

@using (Ajax.BeginForm("Method", "Action", new AjaxOptions { OnSuccess ="onSuccess" }))
{
    <button type="submit">RunMyMethod</button>                    
}
@使用(Ajax.BeginForm(“方法”、“操作”、新的AjaxOptions{OnSuccess=“OnSuccess”}))
{
RunMyMethod
}
和Javascript/Jquery

<script type="text/javascript">
    function onSuccess(result) {
        alert("Success")
    }
</script>

函数onSuccess(结果){
警惕(“成功”)
}

但是,您如何检测帖子何时完成?我假设您的页面会重新加载帖子。如果控制器中的代码同步运行(默认情况下),则在渲染视图之前完成post。因此,将RenderMyScript设置为true将发生在文章完成之后和视图显示之前。但是,您如何检测文章何时完成?我假设您的页面会重新加载文章。如果控制器中的代码同步运行(默认情况下),则在渲染视图之前完成post。因此,将RenderMyScript设置为true将在post完成之后和视图显示之前发生