我有一个表单,点击提交按钮进入控制器中的操作。 这很好用。该操作返回具有视图模型的视图:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Title,Name,Surname,Email,ContactNumber")]ClientViewModel clientViewModel)
{
*some actions*
return View("SaveClient", matchesClientViewModel);
}
SaveClient.cshtm:
@model BusinessModels.MatchesClientViewModel
@{
ViewBag.Title = "SaveClient";
}
<h2>SaveClient</h2>
<h3>
bla bla
</h3>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
WebGrid grid = new WebGrid(Model.ClientMatches);
@grid.GetHtml(columns: new[]
{
grid.Column("Name"),
grid.Column("Surname"),
grid.Column("Email"),
})
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
}
在我的控制器中,我有以下行动:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveClient(MatchesClientViewModel matchesClientViewModel)
{
*some actions*
return View();
}
但是,提交按钮不会触及SaveClient操作,而是创建操作。 在IE中检查表单时,我可以看到表单进入/ Client / Create操作。
我试过替换
@using(Html.BeginForm()) 同 但它不起作用。
我的路线配置是:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
知道我在这里做错了吗?请帮助,我在2天之后就已经开始了。
答案 0 :(得分:1)
您可以将onclick="location.href='@Url.Action("Action", "Controller")'"
添加到input
元素中。在您的情况下,"Action"
(操作方法的名称)为"SaveClient"
,"Controller"
(控制器名称)为"Client"
:
<input type="submit" value="Save" class="btn btn-default" onclick="location.href='@Url.Action("SaveClient", "Client")'" />
答案 1 :(得分:0)
MVC框架中有一些由约定驱动的东西。因此,您需要明确指定操作和控制器名称,以将其发布到您自己定义的与常规操作名称不同的操作名称:
@using (Html.BeginForm("SaveClient","ActionName",FormMethod.Post))