【问题标题】:Javascript click event before MVC Action callMVC Action 调用之前的 Javascript 点击事件
【发布时间】:2016-12-15 18:42:05
【问题描述】:

当涉及到从 javascript 触发的事件与从 MVC 操作触发的事件时,我所写的作品和我正在寻找更多的理解。我拥有的 javascript 根据按下的按钮设置值 true 或 false。表单是挂起还是未挂起是用户操作。在同一情况下(我相信)按下按钮会将表单提交给我的控制器。

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

@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 怎么知道要等待?

【问题讨论】:

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


    【解决方案1】:

    简而言之,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>
    

    【讨论】:

    • 有趣。虽然,这是有道理的。如果我有更复杂的 JS,也许我应该使用 preventDefault 方法。你会建议我用点击事件来做这个吗?
    • 更新:如果您不想提交表单而只运行 js 函数,这是一种方法。如果您想先运行 JS,则可以使用常规按钮而不是提交按钮并执行 $("#yourFormId").submit();在你的 js 函数的末尾。
    【解决方案2】:

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

    所以你的这段代码 @using (Html.BeginForm(.. 将被更改为 HTML form 标签。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 2012-05-27
      • 1970-01-01
      • 2016-09-19
      • 2011-01-23
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多