Html.BeginRouteForm не генерирует URL для именованного маршрута - PullRequest
2 голосов
/ 27 января 2011

Я пытаюсь использовать Html.BeginRouteForm для генерации действия для формы в приложении ASP.NET MVC.Маршрут, на который я нацеливаюсь:

//CREATE
routes.MapRoute("map-config-post", "projects/{projectId}/mapconfigs",
    new { controller = controllerName, action = "Create" },
    new { httpMethod = new RestfulHttpMethodConstraint("POST") });

Юнит-тестирование и следование по маршруту в приложении прошло успешно.Теперь я хотел бы создать HTML-форму с этим маршрутом, это URL:

@using (Html.BeginRouteForm("map-config-post", new { projectId = Model.Project.Id }))
{ 
    //form stuff
}

В результате получается HTML-форма с пустым атрибутом действия.Погуглив, кажется, это должно сработать.Это «Новое» представление, поэтому текущий (т. Е. Обратный) маршрут имеет вид

projects/1/mapconfigs/new

. И я хочу, чтобы он отправил сообщение на

projects/1/mapconfigs

, что должно быть в действии формыбыть.

Я могу вручную сделать все это, если я не использую помощников, но тогда я теряю хороший материал для автоматической проверки на стороне клиента.

Итак, есть идеи, что я делаю неправильно?Надеюсь, понятно, что я пытаюсь сделать.

1 Ответ

2 голосов
/ 27 января 2011

Кажется, что проблема связана с вашим пользовательским ограничением RestfulHttpMethodConstraint. Использование по умолчанию прекрасно работает:

routes.MapRoute(
    "map-config-post",
    "projects/{projectId}/mapconfigs",
    new { controller = "Home", action = "Create" },
    new { httpMethod = new HttpMethodConstraint("POST") }
);

и затем:

@using (Html.BeginRouteForm("map-config-post", new { projectId = Model.Project.Id }))
{ 
}

генерирует:

<form action="/projects/123/mapconfigs" method="post">

</form>
...