我是ASP.NET MVC的新手。我目前正在使用ASP.NET MVC 3.我正在尝试使用图像按钮创建一个基本表单,将数据发布回控制器。我的表单如下所示:
MyView.cshtml
@using (Html.BeginForm())
{
@Html.TextBox("queryTextBox", string.Empty, new { style = "width:150px;" })
<input type="image" alt="Search" src="/img/search.png" value="Search" name="ExecuteQuery" />
}
MyController.cs
public class MyController: Controller
{
public ActionResult Index()
{
ViewData["CurrentDate"] = DateTime.UtcNow;
return View();
}
[HttpPost]
public ActionResult ExecuteQuery()
{
if (ModelState.IsValid)
{
return View();
}
}
}
我已经确认我正在访问我的控制器代码。我能够做到这一点的方法是成功打印出与ViewData相关的“CurrentDate”。但是,当我单击我的图像按钮时,我假设我的ExecuteQuery方法中的断点会触发。它不是。我究竟做错了什么?如何在MVC中进行简单的POST?
答案 0 :(得分:8)
您的表单指向错误的操作。
致电Html.BeginForm()
会创建一个<form>
,其张贴到当前操作(Index
)。
您需要将操作名称传递给BeginForm
。
答案 1 :(得分:0)
试试这个
@using (Html.BeginForm("ExecuteQuery", "MyController", FormMethod.Post))
{
@Html.TextBox("queryTextBox", string.Empty, new { style = "width:150px;" })
<input type="submit" value="Search" />
}
在您的控制器中
public class MyController: Controller
{
public ActionResult Index()
{
ViewData["CurrentDate"] = DateTime.UtcNow;
return View();
}
[HttpPost]
public ActionResult ExecuteQuery(string queryTextBox)
{
if (ModelState.IsValid)
{
// DO SOMETHING WITH queryTextBox
return View();
}
}
}
如果图像提交按钮对您非常重要,您仍然可以使用CSS更改按钮背景图像。