2012-11-06 32 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