我是ASP.NET MVC 4的新手,并且在现有的MVC 4代码库中学习。我试图找到处理与此提交按钮对应的表单的代码。我知道动作链接可能会说明如何处理“提交”按钮 - 但我没有看到任何构造函数为microsoft documentation中的动作链接带有三个字符串。
我很困惑,因为输入标签中没有操作字段。
如何确定一旦该人提交后会发生什么?
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data", @class = "disableSubmit" }))
{
...
<div class="buttons">
<input type="submit" value="Upload" /> | @Html.ActionLink("Back to List", "Index", "Admin")
</div>
}
更新当我转到“查看来源”查看我看到的原始HTML时
<form action="/Lab/Upload" ...
这意味着它会进入实验室/上传控制器吗?
禁用提交的Javascript如下所示:
// Disable submit button after click
$(function () {
$('.disableSubmit').submit(function () {
if ($(this).valid()) {
$('input[type="submit"]').attr('disabled', 'disabled');
}
});
});
答案 0 :(得分:1)
检查表单标记内的提交按钮。如果是,那么操作属性值是什么?这是表单提交的地方。
您可能会在视图中看到名为Html.Beginform
的HTML帮助程序方法。此方法呈现表单标记。您可以转到该页面并查看页面的 查看源 ,以查看表单标记的外观以及action
方法属性值是什么。
通常,您的控制器将有一个标有HttpPost
属性的操作方法来处理表单提交。让我们说你的标记是这样的
<form action="User/EditUser">
<input type="text" name=Name" />
<input type="submit" />
</form>
现在在你的UserController
中,可能会有像这样的动作方法
[HttpPost]
public ActionResult EditUser(SomeModelIfExist model)
{
// TO DO : save and redirect
}
Html.ActionLink
辅助方法呈现锚标记。它与表单提交无关。因此,您的操作链接助手将返回以下标记
<a href="Admin/Index">Back</a>
答案 1 :(得分:1)
如果提交按钮执行常规表单提交,则它将位于<form>
标记或@Html.BeginForm
使用块内。
BeginForm会将表单提交给与视图名称匹配的操作,除非传递的参数指定了操作名称和/或控制器名称。
如果它是表单标记,那么表单标记的action="something"
属性将指示提交的URL,通常是controllerName / ActionName`,但可能会有所不同,具体取决于设置的路由。
您看到的ActionLink与表单或提交无关,它是一个常规链接,实际上是用户返回上一页而不是提交表单的方式
还有可能在提交按钮上附加了javascript。不幸的是,由于javascript可以通过多种方式连接到按钮,因此很难找到。
编辑:根据您的更新,我强烈怀疑有支持此表单的JavaScript。我想在您遇到允许显示的某些条件之前,会禁用提交按钮。也许权限,可能完全填写表格,很难说。在javascript中搜索disableSubmit
,因为我怀疑在某些地方有代码可以在某些条件下删除该类。
编辑2:发生了什么事情它在第一次点击后禁用了提交按钮,这样你就不会意外地提交两次,并导致重复提交问题(如果这是创建表单,它避免重复记录)。据我所知,应该有一个与它提交的* .cshtml文件同名的动作。可能在动作上有[Post]或[HttpPost]属性。