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("/");
}*/
}
}
单击时哪个方法处理提交按钮?
答案 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>>
}
并取消评论发布方法。