2010-03-22 1 views
1

저녁 식사를 만들고 편집하는 NerdDinner 예제를 보면 부분 (ViewUserControl 또는 ASCX) DinnerForm을 사용하여 작성 및 편집 기능을 사용할 수 있습니다. RenderPartial ("DinnerForm")을 사용하여 저녁 식사를 한 파일에 통합 할 수 있습니다.ASP.NET MVC의 EditCreate.ascx partial을 사용하여 편집 및 만들기보기

이 접근법은 나에게는 좋지만 폼 태그에 추가 경로 값이나 html 속성을 추가해야하는 문제가 발생했습니다.

이 자동으로 현재의 행동과 컨트롤러를 선택합니다 :

<% using (Html.BeginForm()) { %> 

을하지만, 내가 PHP 버전이나 다른 속성에 전달할 수 있습니다 다른 BeginForm() 오버로드를 사용하는 경우 나는 이런 식으로 할 필요가 :

<% using ("Create", "Section", new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" })) 

그리고 알 수 있듯이 RenderPartial ("OurCreateEditFormPartial")을 호출하는 뷰를 자동으로 감지 할 수있는 기능이 없어집니다. 편집보기에서이 포스트 백이 실패하거나 올바른 컨트롤러 작업으로 다시 게시되지 않기 때문에 값을 하드 코드 할 수 없습니다.

이 경우 어떻게해야합니까?

답변

3

다음 HTML 헬퍼를 추가하는 방법에 대해 무엇 :

public static MvcHtmlString CurrentAction(this HtmlHelper htmlHelper) 
    { 
     return htmlHelper.ViewContext.RouteData.Values["action"]; 
    } 

    public static MvcHtmlString CurrentController(this HtmlHelper htmlHelper) 
    { 
     return htmlHelper.ViewContext.RouteData.Values["controller"]; 
    } 

그런 다음 당신은 다음과 같이 갈 수 :

<% using (Html.CurrentAction, Html.CurrentController, new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" })) 

그것의 100 % 완벽하지만 당신은 어떤 것 추가 HTML 도우미를 추가 할 수 있습니다 좀더 간소화하십시오.

public static MvcForm BeginForm(this HtmlHelper htmlHelper, object routeValues, FormMethod method, object htmlAttributes) 
{ 
    return htmlHelper.BeginForm(Html.CurrentAction, Html.CurrentController, routeValues, method, htmlAttributes); 
} 

이 정보가 도움이되는지 알려주세요. 건배

+0

이것은 확실히 도움이되지만 조금 늘어납니다. 문제는, 다른 몇 가지 특별한 경우로 갈 때마다 몇 가지 기본 기능을 구현하기 위해 사용자 정의 도우미 또는 확장을 작성해야하지만 이미 분명히 ASP.NET MVC 설계자가 놓친 것입니다. 이 일이 얼마나 오래 지속될 것인지 궁금합니다. ;) – mare

+0

MVC "도우미"의 90 %가 그물 주위에 떠있는 것처럼 보입니다. 그렇지 않으면 너무 오랜 호출 만 단축하는 의미 론적 설탕입니다. MVC 팀이 여기에있는 것을 "놓쳤습니다". 대부분의 경우 필요한 것은 바로 앞에 있으며, 어디를보아야하는지 알 필요가 있습니다. – jfar

+0

나는 jfar에 동의한다 ... 내가 원하는 것을 90 %의 시간은하지만, 내가 필요한 기능을 완벽하게 추가 할 수 있다는 사실을 사랑한다. – anthonyv

0

그것이 내가 같은 일을 찾고 있었어요 동안 :)이에서 발견 SO 후 Google 검색에 두 번째 등장하기 때문에 내가 늙은 스레드에서 대답 해요 :

Html.BeginForm and adding properties

으로 MVC3 (MVC2에 대해 확실하지 않음) 액션 및 컨트롤러에 대해 null을 전달하고 BeginForm()이 사용할 기본 경로를 가져올 수 있습니다.

@Html.BeginForm(null, null, FormMethod.Post, new { enctype="multipart/form-data"}) 

건배!