MVC Action调用之前的Javascript单击事件

时间:2016-12-15 18:42:05

标签: javascript jquery asp.net-mvc asp.net-mvc-4

我写的内容很有用,我正在寻找更多的理解,当涉及从javascript触发的事件和触发到MVC Action的事件时。我根据按下的按钮设置了一个值为true或false的javascript。用户操作是表格填写还是不填写表格。在同一个实例(我相信)按钮按下将表单提交给我的控制器。

这是我所描述的。下面是我在按钮点击时提交的表单。

@using (Html.BeginForm("RejectInsertComment", Model.controller, FormMethod.Post, new { @class = "modal-form" }))
{
    <!-- form elements -->
            ....
    @Html.HiddenFor(x => x.is_pended)
    <input type="submit" class="PendLink btn btn-primary" name="Pend" value="Pend"/>
    <input type="submit" class="CompleteLink btn btn-primary" name="Complete" value="Complete" />
}

然后这是javascript,切换pend的值。

 $('.PendLink').click(function () {
            $('#is_pended').val(true);
        });
 $('.CompleteLink').click(function () {
            $('#is_pended').val(false);
        });

这是有效的,我假设Javascript首先在客户端上触发,但MVC如何知道等待?

2 个答案:

答案 0 :(得分:2)

简而言之,ASP.NET MVC并不真正有事件,表单只是提交给提供的动作URL;这与ASP.NET MVC无关。几乎总是javascript将在表单提交之前成功执行(取决于手头的javascript运行速度有多快)。如果你真的想确保在提交表单之前运行javascript,你需要使用这样的方法:

<form onsubmit="return mySubmitFunction()">
  ...
</form>
<script>
function mySubmitFunction(evt) {
  evt.preventDefault();
  someBug();
  return false;
}
</script>

答案 1 :(得分:1)

你弄错了,一旦你的浏览器从服务器获得响应,就没有MVC。 MVC只是服务器端。您的所有.cshtml文件都将转换为普通HTML并作为回复发回。

因此,您的@using (Html.BeginForm(..代码将更改为HTML form代码。

所以实际上你只在客户端处理HTML。

所以现在来到表单提交之前执行Jquery的部分。是的,当您将事件绑定到DOM(在这种情况下单击事件)时,事件将一个接一个地执行。所以在你的click处理程序中如果你不停止事件(例如:e.preventDefault())那么作为下一个事件,表格将被提交。