2011-03-24 3 views
0

다양한 모델 클래스에 대한 여러 EditorTemplates가 있습니다. 이 템플릿들 안에서 분명히 모델의 속성을 참조해야합니다. 내 문제는 Model.Id (예를 들어)의 직접 구문을 사용할 때 값이 null이라는 것입니다. 또 다른 예는 빈 문자열을 반환하는 Model.Name입니다. 그러나 표현식 (예 : @ Html.TextBoxFor (i => i.Name))에서 모델을 참조하면 값이 있습니다. 이 예에서MVC 3 EditorTemplate - 모델 속성이 비어 있습니다.

@model Vigilaris.Booking.Services.CompanyDTO 
<div> 
    <fieldset class="editfieldset"> 
     <legend class="titlelegend">Company Details</legend> 
     <ol> 
      <li> 
       @Html.TextBox("tb1", @Model.Id) 
       @Html.TextBox("tb2", @Model.Name) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.CreatedDate) 
       @Html.DisplayFor(i => i.CreatedDate) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.Name) 
       @Html.TextBoxFor(i => i.Name) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.Description) 
       @Html.TextAreaFor(i => i.Description) 
      </li> 
      <li> 
       @Html.LabelFor(i => i.Phone) 
       @Html.TextBoxFor(i => i.Phone) 
      </li> 
     </ol> 
    </fieldset> 
</div> 

, 모델의 데이터를 표시하는 동시에, labelFor DisplayFor 및 헬퍼 기능을 사용하는 모든 코드 : 상기 설명하기

은 여기 코드이다. 그러나 Html.TextBox 코드 부분은 Model.Id에 0을 반환하고 Name에 빈 문자열을 반환합니다.

모델을 직접 참조 할 때 실제 모델 데이터에 액세스하지 않는 이유는 무엇입니까?

+0

아마도 원인은 아니지만 한 가지로 중복 @이 있습니다. @ Html.TextBox ("tb1", Model.Id)를 사용하십시오 (Model 앞에 @ 표시가 없습니다). –

답변

1

. 내 문제 설명에서 빠뜨린 한 가지는 Telerik MVC Grid 확장을 사용하고 EditorTemplate이 In-form 편집에 사용된다는 것입니다. 따라서이 시점에서는 모델 속성을 사용할 수 없으며 이는 이해할 수있는 동작입니다. Telerik MVC Grid에서 클라이언트 측 onEdit 이벤트를 사용하고 필요에 따라이 값을 설정해야했습니다.

것은 나는이 다음과 같이 내 Telerik MVC 그리드에 ClientEvent을 추가 한 것입니다 해결 기억 방법 :

.ClientEvents(events => events.OnEdit("Users_onEdit")) 

이것은 편집이 트리거 될 때 내 자바 스크립트 함수 호출 Users_onEdit을 실행할 수있는 그리드를 알려줍니다. 그런 다음 자바 스크립트 함수에서 원하는 필드를 찾고 그 값을 설정합니다. 나는이 거기에 다른 사람을 도움이되기를 바랍니다

function Users_onEdit(e) { 
    if (e.mode == "insert") { 
     $("#UserName").removeAttr("readonly"); 
     $("#UserName").removeAttr("title"); 
     $("#divNewUserMessage").show(); 

     var formId = String(e.form.id); 
     var formIndex = formId.indexOf("form"); 
     var companyId = formId.substr(6, formIndex -6); 
     var hiddenCompanyId = $(e.form).find("#CompanyId"); 
     hiddenCompanyId.val(companyId); 
    } 
} 

: 여기에 코드를 발췌 한 것입니다.

+0

해결책을 공유해 주시겠습니까? 나는 동일한 상황에서 나 자신을 발견한다 –

+0

물론 @death_au, 나는 그것을 발굴해야 할 것이지만 그렇게 곧하려고 노력할 것이다. – Ozzy

+1

안녕하세요, @death_au, 요청에 따라 코드를 추가했습니다. 위 참조. 희망이 도움이됩니다. – Ozzy

1

재현 할 수 없습니다. 더 많은 컨텍스트 (컨트롤러, 뷰 등)를 제공해야 할 수도 있습니다.

@Html.TextBox("Id", Model.Id) 
@Html.TextBox("Name", Model.Name) 

을하고도 왜 직접 강력한 형식의 버전을 사용하지 : 또한 당신의 텍스트 상자는이 같은 이름을해서는 안 나는이 일을 알아 내기 위해 관리

@Html.TextBoxFor(x => x.Id) 
@Html.TextBox(x => x.Name) 
관련 문제