MVC如何处理控制器中的按钮点击

时间:2017-02-07 09:34:27

标签: c# asp.net-mvc razor

MVC如何处理代码中的提交按钮?我有一个名为ArticleController的控制器应该处理它,但我无法弄清楚如何。

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

@using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Article</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.Text, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Text, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Text, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default"/>
        </div>
    </div>
</div>
}

<div>
  @Html.ActionLink("Back to List", "Index")
</div>

控制器如下所示:

namespace Decision.Controllers
{
  public class ArticleController : Controller
  {
    // GET: Article
    public ActionResult Index()
    {
        return View();
    }
    [HttpGet]
    public ActionResult Create()
    {
        var article = new ArticleController();
        var home = new HomeController();
        return View(home);
    }

    /*[HttpPost]
    public ActionResult Create(Article article)
    {
        entities.Article.AddObject(article);
        entities.SaveChanges();

        return Redirect("/");
    }*/
  }
}

单击时哪个方法处理提交按钮?

4 个答案:

答案 0 :(得分:1)

HttpPost控制器通常会处理它但是你出于某种原因已经注释掉了吗?您需要在BeignForm上标记一些信息,例如

> python app.py

答案 1 :(得分:1)

因此,在纯HTML中,您需要在具有post方法的表单中包含提交按钮。

 <form action = "" method = "post">
        <input type="submit" name="x" value="x" />
 </form>

BeginForm扩展默认使用post方法。

public static MvcForm BeginForm(
    this HtmlHelper htmlHelper
)

要了解如何使用BeginForm扩展,您可以在此处阅读更多内容: How does @Html.BeginForm() works?

您的主要问题如下:

  

了解@using(Html.BeginForm())如何工作,你需要知道   它已经在哪个页面上。在2中使用@using(Html.BeginForm())   不同的观点将回到两个不同的控制器

首先,您可以在呈现表单时检查HTML中生成的操作:<form action = "" method = "post">

然后你必须知道你有可能将执行的动作/控制器传递给BeginForm扩展方法。

例如:

@using (Html.BeginForm("Create", "Article", FormMethod.Post))
{
  @* *@ 
}

答案 2 :(得分:1)

请查看https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods,了解有关请求方法的明确信息。

当用户查看页面时,这是GET请求,当用户提交表单时,通常是POST请求。 HttpGet和HttpPost只是将操作限制为适用的请求类型。

当你将[HttpPost]添加到动作时,MVC清楚地知道用于处理POST请求的动作。

答案 3 :(得分:0)

好像你在索引视图中。您需要将BeginForm更改为

@using (Html.BeginForm("Create","Article")) 
{
    <<your stuff>>
}

并取消评论发布方法。