我写的内容很有用,我正在寻找更多的理解,当涉及从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如何知道等待?
答案 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()
)那么作为下一个事件,表格将被提交。