2012-11-06 80 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語句,並在要禁用的輸入/編輯器上禁用=「禁用」。

@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> 

}

+1

雖然這會起作用,但請不要在您的意見中加入這樣的「if」塊。讓您的視圖模型爲您完成工作更加富有表現力。 –

+0

@jarrett那麼你的解決方案是什麼? – Nate

+0

@Nate - 查看貼子回答。 –

3

您可以進行現場的readonly="readonly"代替disabled="disabled" readonly字段值,同時仍然由用戶不可編輯提交到服務器。

3

您可以修改您的視圖模型像下面

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) 

這導致了一個更簡單的用戶界面,視圖模型有單元測試的好處!

+0

我最喜歡這個解決方案。 – Nate