我正在使用带有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>
代替按钮。
不确定我哪里出错了
答案 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]
,并且操作方法中缺少您传递的参数