MVC 提交按钮未触发

问题描述 投票:0回答:7

我正在使用 ASP.net MVC 4 和 Razor 引擎。

我有一个页面(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())
,我也尝试过在我的ActionResult上方包含
[HttpPost]
,但没有任何运气。

编辑我也尝试过使用

<input type="submit" id="btnSave">Save</input>
代替按钮。

不知道我哪里错了

c# asp.net asp.net-mvc asp.net-mvc-4 razor
7个回答
17
投票

事实证明,jQuery 正在阻止 ActionResult 被命中。

我有一个按钮单击事件“吞噬”了 ActionResult 功能。我通过使用 Ajax 调用 ActionResult 解决了这个问题。


4
投票

您不需要使用

"-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();
}

3
投票

查看:

@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 引起的,因此请检查一下。 否则它可以正常工作。


2
投票

您需要添加带有参数的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);
        }

1
投票

TL;博士

我的视图模型上有

[Required]
数据属性,在未填写表单时阻止提交工作。


我的 MVC 代码中有 两个提交按钮,一个用于

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": ...
    }

}

0
投票

确保_Layout.cshtml中的@RenderBody()不在标签中


-1
投票

改变这个

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

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

说明:不需要在任何地方添加后缀Controller,默认接受

和在控制器

[HttpPost]
public ActionResult SubmitForm(string id)
    {

        return View();
    }

说明:由于您给出的 Form Method 是 Post 所以需要在 Action 之前包含

[HttpPost]
并且您传递的参数在操作方法中丢失了

© www.soinside.com 2019 - 2024. All rights reserved.