2016-12-15 73 views
-2

我写的作品正在寻找更多的理解,当涉及从javascript和事件触发到MVC Action的事件时。 javascript我已经根据按下的按钮设置值true或false。表单是挂起还是不挂起是用户操作。在相同的情况下(我相信)按钮按下将表单提交给我的控制器。在MVC动作调用之前使用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

总之,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> 
+0

有趣。虽然这是有道理的。如果我有更复杂的JS进行,也许我应该使用preventDefault方法。你会建议我这样做与点击事件? – Jared

+0

更新:如果您不想提交表单并仅运行js函数,则可以这样做。如果你想用JS运行第一次,你可以使用常规按钮,而不是提交按钮,并执行$(“#yourFormId”)。在你的js函数结束时。 – FailedUnitTest

1

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

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

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

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

相关问题