2012-11-06 2 views
2

MVC에서 값이있는 경우 읽기 전용 텍스트 상자를 설정하려고합니다.값이있는 경우 텍스트 상자를 읽기 전용으로 설정하는 방법은 무엇입니까?

그래서 내가

<tr> 
@if (model.first_name != "") { 
    <td > 
       @Html.LabelFor(model => model.first_name): 
      </td> 
      <td > 
       @Html.TextBoxFor(model => model.first_name) 
       <span class="required">*</span> 
       @Html.ValidationMessageFor(model => model.first_name) 
      </td> 
@ else 
    <td > 
    @Html.LabelFor(model => model.first_name): 
      </td> 
      <td > 
       @Html.EditorFor(model => model.first_name) 
       <span class="required">*</span> 
       @Html.ValidationMessageFor(model => model.first_name) 
      </td> 
@} 

      <td > 
       @Html.LabelFor(model => model.first_name): 
      </td> 
      <td > 
       @Html.EditorFor(model => model.first_name) 
       <span class="required">*</span> 
       @Html.ValidationMessageFor(model => model.first_name) 
      </td> 
     </tr> 

쓰기 그러나 작동하지 있습니다 .. 어떻게 그것을 풀기가하는 ?? 어떻게 할 수 있습니까 ??

+1

컴파일되지 않습니까 (괄호가 빠져 있습니까?) 또는 별도의 문제가 있습니까? 무슨 일이 일어나는거야? –

답변

1

면도기에 if 문을 만들고 비활성화하려는 입력기/편집기에서 disabled = "disabled"로 설정하십시오. 당신은 여전히 ​​사용자가 편집 할 수있는 동안 읽기 전용 필드 값을 서버에 제출됩니다 readonly="readonly" 대신 disabled="disabled"의 현장을 할 수

+1

이 방법이 효과가 있지만,'if' 블록을 여러분의 견해에 넣지 마십시오. 뷰 모델이 당신을 위해 일하도록 표현하는 것이 훨씬 더 표현적입니다. –

+0

@ jarrett 그럼 당신의 해결책은 무엇입니까? – Nate

+0

@Nate - 게시 된 답변보기. –

3

@if 
(model.first_name != null) 
{ 

    <td > 
      @Html.LabelFor(model => model.first_name): 
     </td> 
     <td > 
      @Html.TextBoxFor(model => model.first_name) 
      <span class="required">*</span> 
      @Html.ValidationMessageFor(model => model.first_name) 
     </td> 
} 
else 
{ 
    <td > 
    @Html.LabelFor(model => model.first_name): 
     </td> 
     <td > 
      @Html.EditorFor(model => model.first_name, new { disabled = "disabled", @readonly = "readonly" })) 
      <span class="required">*</span> 
      @Html.ValidationMessageFor(model => model.first_name) 
     </td> 

     <td > 
      @Html.LabelFor(model => model.first_name): 
     </td> 
     <td > 
      @Html.EditorFor(model => model.first_name) 
      <span class="required">*</span> 
      @Html.ValidationMessageFor(model => model.first_name) 
     </td> 
    </tr> 

}.

3

당신은 당신의 UI에서 다음

public class MyViewModel 
{ 
    public string first_name { get; set; } 

    public object first_name_attributes 
    { 
    get 
    { 
     return string.IsNullOrEmpty(first_name) ? null : new { @readonly = "readonly" }; 
    } 
    } 
} 

처럼보기 모델을 수정할 수 있습니다, 당신은 선언적으로 객체를 추가 할 수 있습니다.

Html.TextBoxFor(x => x.first_name, first_name_attributes) 

이렇게하면 UI가 훨씬 단순 해지고보기 모델은 단위 테스트가 가능하다는 장점이 있습니다.

+0

나는이 해결책을 가장 좋아한다. – Nate

관련 문제