比較的単純なコードで作成しようとしているフォームがあります。
@using (Ajax.BeginRouteForm("DefaultApi", new { controller = "persons" }, new AjaxOptions {HttpMethod = "post", OnSuccess = "someSuccess"}))}
{
@Html.TextBoxFor(m => m.Name)
}
ApiController である PersonsController があり、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」に戻ることを期待しています。