2012-05-31 1 views
1

저는이 문제를 해결하기 위해 머리를 짚고 있습니다. ASP.NET의 WebSite를 기반으로하는 레거시 응용 프로그램이 있습니다. 나는 MVC를 추가 할 수 있도록 적절한 것들을 추가했고, 대부분 올바르게 작동한다.ASP.NET MVC3 TextBoxFor, EditorFor, ValidateFor 렌더링하지 않음

Html.BeginForm 내에 캡슐화 된 양식 태그가있는 면도날 뷰가 있습니다. 또한 문자열 용 사용자 정의 템플릿 편집기를 만들었습니다. 내가 겪고있는 문제는 일반 텍스트 상자, editorfor 또는 ValidateFor, ValidationSummary를 렌더링하려고 할 때 마크 업이 생성되지 않는다는 것입니다. 내 사용자 정의 템플릿이 실행되지만 정상적인 HtmlHelper는 작동하지 않는 것 같습니다.

여기 내보기 (이 부분도 있어요) 내 사용자 지정 템플릿에서

@model L1.Web.UI.Infrastructure.SectionWrapper<L1.Web.ViewModel.PersonInfoViewModel> 

<div class="section"> 
    @using (Html.BeginForm()) 
    { 
     <div class="pad_10" data-bind="with: sections['PersonInfo']"> 
     <div data-bind="with: data"> 
      @Html.ValidationSummary(true) 
      <table class="full-table form-horizontal"> 
       <tbody> 
        <tr> 
        <td width="30%" class="dotted-border-right"> 
<!-- This kinda work --> 
        @Html.EditorFor(m => m.SectionData.Data.LastName,  
         "modelTemplateString", 
         new {SectionName = "PersonInfo"}) 
!-- This doesn't render anything --> 
        @Html.EditorFor(m => m.SectionData.Data.LastName) 

, 난 작동 일반 HTML을 렌더링하고 있습니다. 내 사용자 지정 템플릿에서 EditorFor를 수행하면 부분적으로 작동합니다. 생성되는 유효성 검사 속성이 표시되지 않습니다. ValidateFor 또는 ValidationMessageFor 내 사용자 지정 서식 파일에있는 마크 업을 생성하지 않습니다. 여기에 (/ 공유/EditorTemplates에있는) 내 사용자 지정 템플릿의 코드

@inherits WebViewPage<string> 

<div class="control-group"> 
<label class="control-label" for="@String.Format("input{0}", ViewData.ModelMetadata.PropertyName)" data-bind="localized: {resourceId: '@ViewData.ModelMetadata.PropertyName', resourceStore: $root}"></label> 
<div class="controls"> 
    <input id="@String.Format("input{0}", ViewData.ModelMetadata.PropertyName)" class="input-small" type="text" data-bind="visible: $root.sectionDefinitions['@ViewData["SectionName"]'].isEditing, value: @ViewData.ModelMetadata.PropertyName"/> 
    <a class="edit-link" data-bind="visible: $root.sectionDefinitions['@ViewData["SectionName"]'].isInReadMode"> 
     <strong data-bind="text: @ViewData.ModelMetadata.PropertyName"></strong> 
    </a> 
    @{ Html.ValidateFor(m => m); } 
</div> 

가 나는 또한 항상 사용하는 것을 생각하고, 완전히 프로젝트에서 내 사용자 지정 템플릿을 제거하려는 경우에도입니다 EditorFor에서 사용자 정의 템플리트 이름을 지정하지 않습니다. 이것은 변화를 가져 오지 않았습니다. 내 프로젝트가 부분적으로 HtmlHelpers를 렌더링 할 수없는 것 같습니다.

양식 태그를 만든 후에 ViewContext.FormContext가 null이 아니며 그 부분이 잘 보입니다.

어떤 도움이나 제안이라도 대단히 감사하겠습니다.

감사

답변

0

은/공유/EditorTemplates 폴더에 편집기 템플릿의 전체 파일 이름이 무엇입니까?

에서 @ Html.EditorFor는 (m => m.SectionData.Data.LastName) 아마 String.cshtml 당신은 또한 확인하는 것이 좋습니다 modelTemplateString.cshtml

를 호출 할 필요가 다른 하나를 호출합니다 @model String 태그는 편집기 템플릿 상단에 있습니다.

템플릿에서 볼 수있는 것은 ViewData 객체를 사용하는 모델 데이터를 acutally 사용하는 것입니다.

+0

전체 이름은 modelTemplateString.cshtml입니다. 내 사용자 지정 서식 파일이 작동하지 않는 것이 문제입니다. 그것은 실제로 그것을 렌더링하고 있습니다. 작동하지 않는 것은 MVC의 기본 템플릿이 마크 업을 렌더링하지 않는다는 것입니다. – user1428857

+0

LastName 필드가 기본 String 객체라고 가정하여 올바른가? –

+0

네, 맞습니다. 깔끔한 것은 문자열이라도 사용자 정의 템플릿에 들어갈 때 해당 모델의 컨텍스트에서 적절한 ModelMetadata를 얻을 수 있다는 것입니다. 깔끔하지 않은 점은 ValidateFor 및 EditorFor를 사용할 수 없다는 것입니다. – user1428857