我如何理解这个“提交”按钮/ actionlink在ASP MVC 4中的位置?

时间:2013-06-18 16:49:00

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

我是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');
        }
    });
});

2 个答案:

答案 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]属性。