2017-10-13 6 views
0

나는 가입 정보를 수집하기위한 간단한 양식을 포함하는 프로젝트를 가지고 있습니다. 최근에 나는 사용자에게 보여지는 모든 텍스트가 하드 코딩 되었기 때문에 프로젝트에 지역화를 추가하기 위해 노력해 왔습니다. 무엇이 바뀌 었는지는 모르겠지만, Razor가 Html.EditorFor 메소드를 사용하여 HTML 요소를 렌더링 할 때, 이제는 텍스트 박스가되고, 요소의 Name 속성에는 ".textbox"가 추가됩니다.Html.Editor .textbox를 요소 이름에 추가하십시오.

이렇게하면 바인딩이 깨져서 모델을 수신 할 때 모든 텍스트 값이 null이됩니다. 여기에 제가 보는 무엇을, 면도기 코드의 예입니다

<div class="form-group" ng-class="{ 'has-error': validate && accountForm.FirstName.$invalid }"> 
     @Html.LabelFor(m => m.FirstName, new { @class = @ViewBag.LabelCssRequired }) 
     <div class="@ViewBag.TextboxCss"> 
      @Html.EditorFor(m => m.FirstName, new { htmlAttributes = new { ng_model = "firstName" } }) 
     </div> 
    </div> 

는 여기에 렌더링 된 출력 :

<input class="text-box single-line form-control ng-valid-maxlength ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required ng-touched" id="FirstName_textbox" maxlength="100" name="FirstName.textbox" ng-model="firstName" required="required" type="text" value=""> 

또한 아이디에 "_textbox"을 추가하고,하지만 난 ' 나는 그 순간을 염려하지 않았다. 웬일인지, 이것은 타입이 "텍스트"인 요소를 입력하는 것만 보입니다. 생성 된 또 다른 입력이 있습니다 .EditorFor에는 전자 메일 유형이 있으며 이름을 수정하지 않았습니다.

이 동작은 또한 Html.EditorFor로 제한되는 것으로 보입니다. 사용하는 경우, 잘 작동합니다.

나는 면도기에서 @Name 속성을 명시 적으로 설정하여 바인딩을 만들 수 있었지만 증상에 대해서만 마스크를 적용 했으므로 사이트의 모든 텍스트 입력에 대해이 작업을 수행하지 않아도됩니다.

수정 프로그램을 사용하기 전에이 동작을 본 사람이 있습니까?

+0

혹시'project root \ views \ shared \ editortemplates'에 무엇이 있습니까? 나는 이것이 일어나서는 안된다고 확신하고, 불량 편집기 템플릿이이 동작을 설명 할 것입니다. –

+0

@ Balázs 그게 다야! 어떻게 든이 템플릿 중 하나에서 출력 된 텍스트 상자의 이름이 "텍스트 상자"이므로 ".textbox"가 추가 된 것 같습니다. 지금까지이 파일들을 만질만한 이유가 없었기 때문에 이런 일이 어떻게 일어 났는지 나는 잘 모르겠습니다. 그걸 답으로 게시하고 싶으면 받아 들일 것입니다. 파일에 파일이 추가 된 방법을 알아 내야합니다. – KSF

답변

1

기본적으로 TextBoxFor 도우미는 기본 제공 템플릿을 사용하여 HTML을 생성합니다. project root\views\shared\editortemplates 폴더에 파일을 작성하여 기본값을 대체 할 수 있습니다.

따라서 일부 사용자 지정 서식 파일이 있으면 문제가 발생할 수 있습니다. 일반적으로 이름이 일치하는 데이터 유형 (예 : string) 또는 제어 유형 (예 : TextArea)을 확인해야합니다. 해당 모델 속성에 UIHint 특성이 있으면 해당 모델 속성에 지정된 사용자 지정 파일도 재생 될 수 있습니다.