ASP.NET MVC 3 - 将表单发回控制器

时间:2011-11-28 15:56:33

标签: asp.net-mvc-3

我是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?

2 个答案:

答案 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更改按钮背景图像。