BeginRouteForm不适用于API路由?

时间:2013-05-17 22:22:57

标签: c# asp.net-mvc-4 asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing

我有一个我想用相对简单的代码创建的表单:

@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是可选的)。

我在这里缺少什么?你能否通过MapHttpRoute添加路线来使用BeginRouteForm? Html.BeginRouteForm和Ajax.BeginRouteForm的行为是相同的(因为它应该是,它们具有相同的基础)。显然,在这种情况下,我希望行动回来'/ api / persons'。

1 个答案:

答案 0 :(得分:0)

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

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