2011-07-06 4 views
0

의 이름을 지정합니다.다음 코드가 왜 궁금 드롭 다운리스트의 asp.net mvc3 면도기

<select style="display: none;" size="10" name="CollectionCategory.Classification.Nationality.NationalityId" id="CollectionCategory_Classification_Nationality_NationalityId" class="pickList"> 

함수의 서명은 반드시 다음과 같다 여기서

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes); 

는 부모 뷰의 뷰 모델에 의해 오버라이드 (override) 이름 매개 변수 이예요처럼 보인다. (이것은 부분보기에 있습니다). 누구에게도 이것이 의미가 있습니까?

답변

0

CollectionCategory이라는 탐색 속성의 경우이 헬퍼를 편집기 템플릿 또는 부분에서 호출했기 때문입니다. 이것은 정상적인 동작이며 바인딩 할 때 컨트롤러 동작에 적절한 값이 전달되도록합니다. 당신이 규칙을 따라야하지 않으려면 (왜 당신에게없는 것 아무 생각) 물론

@Html.DropDownListFor(
    x => x.Classification.Nationality.NationalityId, 
    Model.Nationalities, 
    new { 
     @size = 10, 
     @style = "display:none;", 
     @class = "pickList" 
    } 
) 

있지만 : 그리고 나는 그 리팩토링 비우호적 인 마법 문자열을 피하기 위해이 도우미의 강력한 형식의 버전을 사용을 권장하지 않을 것이다 POST 액션에서 바인딩 접두어를 지정할 수 있습니다.

[HttpPost] 
public ActionResult Foo([Bind(Prefix = "CollectionCategory")] ClassificationViewModel model) 
{ 
    ... 
} 
+0

나는 그 라인을 따라 시작했습니다. 이 문제는 javascript 기능을 가진 재사용 된 구성 요소이므로 클라이언트 측 스크립트에서 구성 요소의 ID가 중요하다는 점에 있습니다. 뷰 모델에서 "ModelPrefix"또는 이와 유사한 것을 처리 할 수있는 속성을 가질 수 있습니다. 왜 이런 일이 벌어지고 있는지 내 질문에 대답했습니다. 감사. – voam

관련 문제