2012-02-12 2 views
0

안녕하세요, 명시 적으로 내 EditorFor 출력에서 ​​ID 및 이름 및 유효성 검사 입력란을 변경하려고합니다.중첩 된 EditorFor 내에서 EditorFor ID 필드를 재정의

Html.EditorFor(x => ViewBag.NestedFormDatas) 

위의 접두사 현재 모델의 이름으로 모든 필드 :

나는 다음과 같은 코드가 있습니다.

내 임시 솔루션은 다음과 같다 (내가 이상적 거리가 멀다 알고 있지만 작동을!) :

@Html.Raw(Html.EditorFor(x => ViewBag.NestedFormDatas).ToHtmlString().Replace("NestedForm", "DesiredPrefix")) 

답변

0

당신은 가장 확실하게 TextBoxFor와 HTML 속성을 재정의하기위한 htmlAttributes 인수를 사용하려고 할 수 있습니다 :

@Html.TextBoxFor(x=>item.Name,new { id="newId"}) 

당신의 코드를 살펴볼 때 염려되는 점은 알려진 유형의 객체 속성을위한 메서드로 동적 뷰 데이터 사전 (ViewBag)을 사용하고 있다는 것입니다. ViewBag를 강력한 형식의 컬렉션이있는 ViewModel로 대체하는 것이 좋습니다. 필드 네이밍으로 문제를 해결할 수 있습니다 (단지 가정합니다. 그러나 입력 요소에서 접두사를 제거하는 이유라고 생각할 수있는 유일한 방법입니다)

+0

저는 ViewModel을 사용하는 것에 일반적으로 동의하지만 모델이 맞지만보기를 만드는 데 사용하는 방법이 약간 정통이기 때문에 내가 왜 적합하지 않은지에 대한 이유가 있습니다. 설명하기가 어렵습니다. 기본적으로 내보기에서 다른 편집기 템플릿 내에있는 다른 영역으로 개체 목록을 이동하도록 선택했습니다. 이것은 사용자 관점에서 의미가 있지만 코드 내에서 ID 필드를 수정하여 게시 된 모델에 다시 연결해야합니다. –

+0

내 ID가 'DesiredPrefix_0__NestedFormData_0__Property'가되어야합니다 이전에 'NestedForm_0__NestedFormData_0__Property'였습니다 이 경우 DesiredPrefix는 모델의 다른 목록입니다. –

2

idname 특성을 변경해야한다고 생각합니다. 뷰 모델을 사용하고 있지 않습니다. 제대로보기 모델을 사용하는 경우 편집기 템플릿이 이미 적절한 값을 생성하기 때문에, 당신은 변경 이름과 ID에 필요하지 않습니다

@Html.EditorFor(x => ViewBag.NestedFormDatas) 

: 어쨌든

@Html.EditorFor(x => x.NestedFormDatas) 

을 다음은 너무 잘못된 것 같습니다 한 가지 가능성은 주어진 유형에 대한 사용자 정의 편집기 템플리트를 작성하는 것입니다. 그래서 우리는 NestedFormDatas 당신이 the default one을 무시하고 추가 속성을 지정할 수 있도록 다음과 같은 ~/Views/Shared/EditorTemplates/String.cshtml 편집기 템플릿을 추가 할 수있는 문자열 형식이라고 가정하면 : 마찬가지로 지금까지와 같은

@Html.EditorFor(x => x.NestedFormDatas, new { id = "foo" }) 

을 : 다음

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue, 
    ViewData 
) 

하고 name 속성과 관련하여 이는 TextBox 도우미로 재정의 될 수있는 것이 아닙니다. 당신은 당신이 그것을 달성 할 필요가 있다면 당신 자신의 도우미를 써야 할 것입니다. 그러나 뷰 모델을 사용하면 결코 그렇게 할 필요가 없다고 말했듯이, 뷰 모델의 목적은 정확하게 주어진 뷰의 요구 사항과 일치하기 때문입니다.

코드에서 ViewBag의 흔적을 제거하고 뷰 모델을 정의하기 시작하십시오. 얼마나 재미 있고 쉬운 ASP.NET MVC가 될지 알게 될 것입니다.

+0

Darin,이 경우 id 앞에 @를 붙이면 특별한 이유가 있습니까? 나는 그것이 "클래스"를위한 필수 항목이라는 것을 알고있다. 무엇보다, 당신의 샘플이 TextBoxFor와는 달리 EditorFor로서 작동하지 않을 것이라고 생각한다. htmlAttributes를 입력 매개 변수 – torm

+0

@ torm, 절대적으로 취하지 않는 오버라이드가 없다. 그것은 내 부분에서 나쁜 복사 붙여 넣기했다. 이미 삭제되었습니다. –

+0

오, 오케이, 나는이 트릭 뒤에 어떤 종류의 트릭이 있다고 생각했다 @ : EditorFor는 어때? 확인할 수 있습니까? – torm

관련 문제