【发布时间】:2018-10-16 11:55:21
【问题描述】:
我在 asp.net mvc 5 中提交表单时遇到问题。当我使用 razor Html.BeginForm() 时,它会创建一个带有空操作的表单并且它不起作用。当我使用 html 代码时,它会打开带有错误 404 的新页面“site.com/Home/NewDeck”
以下两个视图的代码都不起作用。
这是视图代码(使用 Html.BeginForm()):
@using (Html.BeginForm("NewDeck", "Home", FormMethod.Post, new { @class="popup-form"}))
{
<div class="popup-header-row">
<div style="display:flex; margin: 0; width: 24px"></div> @*pseudo element*@
<div class="popup-header">New deck</div>
<img id="btn-close-new-deck" src="~/Content/images/close.svg" class="close-button" />
</div>
@Html.TextBoxFor(Model => Model.NewDeck.Name, new { @placeholder = "Name of the deck", @class = "input-text-form" })
<input type="submit" value="Add deck" class="btn-one-center" />
}
这是视图代码(带表单):
<form method="post" action="/Home/NewDeck" class="popup-form">
<div class="popup-header-row">
<div style="display:flex; margin: 0; width: 24px"></div> @*pseudo element*@
<div class="popup-header">New deck</div>
<img id="btn-close-new-deck" src="~/Content/images/close.svg" class="close-button" />
</div>
@Html.TextBoxFor(Model => Model.NewDeck.Name, new { @placeholder = "Name of the deck", @class = "input-text-form" })
<input type="submit" value="Add deck" class="btn-one-center" />
</form>
这是 HomeController 代码:
[Route("")]
[HttpGet]
public ActionResult Index()
{
Model = new HomeViewModel { DeckList = Database.GetDecksList("mail@gmail.com") };
Model.NewDeck = new Deck { Random = false };
return View(Model);
}
[HttpPost]
public ActionResult NewDeck(HomeViewModel model)
{
Database.AddDeck(model.NewDeck.Name, "mail@gmail.com", model.NewDeck.Random);
return View(model);
}
【问题讨论】:
-
当您拥有
Html.BeginForm("NewDeck", "Home"时会发生什么?当你使用它时,你应该删除内部表单,因为嵌套表单是无效的! -
@Shyju Html.BeginForm() 被评论
-
我是说为什么不使用它?助手将正确设置动作属性值,而不是硬编码并获得 404。只需使用它并删除内部表单。
-
@Shyji 我不一起使用这些。我已经更新了这个问题。两者都不起作用
-
那么当您现在点击提交按钮时会发生什么?你的代码对我来说很好。它会提交表单。您是否有一些 js 代码劫持了提交/单击事件。 ?
标签: html razor asp.net-mvc-5