2011-01-26 7 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") }); 

단위 테스트 후 앱에서 경로가 성공했습니다. 이제 URL이이 경로를 사용하여 HTML 양식을 작성하려고합니다.

@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") } 
); 

다음 :

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

</form> 
+0

그래,하지만 내가 양식을 게시 할 경우 지금은 삭제 작업에 경로를하지 않는 :

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

것은 생성 X-HTTP-Method-Override를 DELETE로 설정하면 내 사용자 지정 제약 조건이 적용됩니다. 그래서 BeginRouteForm의 RouteValueDictionary에 'httpMethod'속성을 추가하여 작동되게해야했습니다. 나를 옳은 길에 올려 줘서 고마워! – Ruprict

관련 문제