2011-01-26 4 views
2

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

//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 

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

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

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

ответ

2

Похоже, что проблема исходит из вашего пользовательского ограничения RestfulHttpMethodConstraint. Используя default one работает прекрасно:

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> 
+0

Да, но теперь это не путь к операции удаления, если я отправляю форму к которому с помощью параметра X-HTTP-Method-Override установлено значение DELETE, что и делает мое пользовательское ограничение. Таким образом, мне пришлось добавить атрибут 'httpMethod' в свой RouteValueDictionary в BeginRouteForm, чтобы он работал. Спасибо, что поставил меня на правильный путь! – Ruprict

Смежные вопросы