MVC提交按钮未触发

时间:2014-06-26 13:27:09

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我正在使用带有Razor引擎的ASP.net MVC 4。

我有一个页面(Index.cshtml)和一个控制器(HomeController.cs)

我正在尝试将我的提交按钮连接到我的控制器中的操作结果 - 但是我似乎无法解决它。

我的HTML:

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post))
{
      <div class="main-Background">

      ******lots of other html here*******
        <button type="submit" id="btnSave">Save</button>

    </div>
}

我的控制器:

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }


        [HttpPost]
        public ActionResult SubmitForm()
        {
          return View();
        }

    }

目前我还没有实现模型将值传递给控制器​​,我只是想知道是否可以触发ActionResult SubmitForm。

我已尝试@using (Html.BeginForm())没有参数,我也试过将[HttpPost]包含在我的ActionResult之上,没有任何运气。

编辑 我也尝试使用<input type="submit" id="btnSave">Save</input>代替按钮。

不确定我哪里出错了

6 个答案:

答案 0 :(得分:12)

事实证明,jQuery阻止了ActionResult被击中。

我有一个按钮点击事件,这是&#34;正在吃饭&#34; ActionResult功能。我通过使用Ajax调用ActionResult来解决这个问题。

答案 1 :(得分:3)

您不需要使用"-Controller"后缀。仅使用Home代替HomeController,MVC会为您转换它。

使用

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post, new { id = "submitForm" }))

而不是

@using (Html.BeginForm("SubmitForm", "HomeController", FormMethod.Post, new { id = "submitForm" }))

完整代码

查看

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post, new { id = "submitForm" }))
{
      <div class="main-Background">

          ******lots of other html here*******
          <input type="submit" id="btnSave">Save</input>

    </div>
}

和控制器

[HttpPost]
public ActionResult SubmitForm()
{
    return View();
}

答案 2 :(得分:1)

查看:

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post))
{
  <div class="main-Background">
    ******lots of other html here*******
    <button type="submit" id="btnSave">Save</button>

  </div>
}

控制器:

[HttpPost]
public ActionResult SubmitForm()
{
    return View();
}

可能是因为您的div中的其他HTML发生了问题所以请检查出来。否则它完美无缺。

答案 3 :(得分:0)

您需要添加带有参数的Html.BeginForm。这是一个示例:

ActionName –动作的名称。在这种情况下,名称为“创建”。

ControllerName –控制器的名称。在这种情况下,名称为Home。

FormMethod –它指定表单方法,即GET或POST。在这种情况下,它将设置为POST。

http://localhost:60386//Home/Create


@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
  @Html.EditorFor(model => model.FirstName)

  <input type="submit" value="Create"/>
}


HomeController.cs:
        [HttpPost]
        public ActionResult Create(Person person)
        {

            if (ModelState.IsValid)
            {
                db.Persons.Add(person);
                db.SaveChanges();
                return RedirectToAction("Create");
            }

            return View(person);
        }

答案 4 :(得分:0)

TL;DR

我的视图模型上有 [Required] 数据属性,无法在未填写表单时提交工作。


我有 two submit buttons in my MVC code,一个用于 Submit,另一个用于 Cancel

两个按钮在输入数据时都正确触发,但在未输入任何内容时都没有触发。

我花了一点时间才意识到我的视图模型有 [Required] 字段验证!

查看:

@using (Html.BeginForm(actionName: "Index", controllerName: "User", method: FormMethod.Post))
{
    @Html.AntiForgeryToken()
    
    @Html.TextBoxFor(m => m.PhoneNumber)
    
    ...
    
    <input type="submit" name="submitAction" value="Verify" />
    <input type="submit" name="submitAction" value="Cancel" />
}

视图模型:

public class UserViewModel
{
    [Required]
    [MaxLength(10)]
    public string PhoneNumber { get; set; }
    
    [Required]
    ...
}

控制器方法:

[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult Index(UserViewModel viewModel, string submitAction)
{
    switch(submitAction)
    {
        case "Verify": ...
        
        case "Cancel": ...
    }

}

答案 5 :(得分:-1)

更改此@using (Html.BeginForm("SubmitForm", "HomeController", FormMethod.Post, new { id = "submitForm" }))

@using (Html.BeginForm("SubmitForm", "Home", FormMethod.Post, new { id = "submitForm" }))

说明:无需在任何地方添加控制器,默认情况下接受

并在控制器

[HttpPost]
public ActionResult SubmitForm(string id)
    {

        return View();
    }

说明:由于您提供的表单方法是Post,因此需要在Action之前包含[HttpPost],并且操作方法中缺少您传递的参数