MVC 5:提交按钮击中控制器中的错误动作

时间:2018-04-30 12:39:20

标签: c# asp.net-mvc-5

我有一个表单,点击提交按钮进入控制器中的操作。 这很好用。该操作返回具有视图模型的视图:

    [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天之后就已经开始了。

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))
相关问题