5

比較的単純なコードで作成しようとしているフォームがあります。

@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」に戻ることを期待しています。

4

1 に答える 1

1

MVC 5 と Web API 2.2 を使用すると、ビューに次のマークアップが機能しました。

@using (Ajax.BeginRouteForm("DefaultApi",
        new { controller = "User", HttpRoute = "true" },
        new AjaxOptions { HttpMethod = "POST", OnFailure = "onFailure", OnSuccess = "onSuccess" }))
{
}
于 2014-02-25T05:21:59.837 に答える