我正在尝试使用相对简单的代码创建一个表单:

@using (Ajax.BeginRouteForm("DefaultApi", new { controller = "persons" }, new AjaxOptions {HttpMethod = "post", OnSuccess = "someSuccess"}))}
{
    @Html.TextBoxFor(m => m.Name)
}


我有一个PersonsController,它是一个ApiController,并且在WebApiConfig中有以下路由:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);


但是BeginRouteForm调用不返回任何操作。产生的HTML:

<form action="" data-ajax="true" data-ajax-method="post" data-ajax-success="someSuccess" id="form0" method="post">
</form>


如您所见,该操作为空。它不是在抱怨找不到路线(如果找不到就应该找到),这是怎么回事?我什至尝试在routeValues对象中提供一个空的id,但这也不起作用(尽管由于id是可选的,因此也不是必需的)。

我在这里想念什么?您不能将BeginRouteForm与通过MapHttpRoute添加的路由一起使用吗? Html.BeginRouteForm和Ajax.BeginRouteForm的行为都是相同的(应该具有相同的基数)。显然,在这种情况下,我希望操作会返回“ / api / persons”。

最佳答案

拥有MVC 5和Web API 2.2的视图中的以下标记对我有用:

@using (Ajax.BeginRouteForm("DefaultApi",
        new { controller = "User", HttpRoute = "true" },
        new AjaxOptions { HttpMethod = "POST", OnFailure = "onFailure", OnSuccess = "onSuccess" }))
{
}

08-05 15:35