2013-01-31 55 views
2

在MVC4中,我有一個EditorFor字段,它代表一個布爾值並呈現爲複選框,如果複選框被選中,我想讓其他EditorFor字段更改爲不可編輯。這在簡單的html中會很簡單,但是使用剃刀語法我不確定如何執行此操作。在EditorFor字段上使用JavaScript?

<div class="editor-field"> 
     @Html.EditorFor(model => model.Draw) 
     @Html.ValidationMessageFor(model => model.Draw) 
    </div> 

<script type="text/javascript"> 
function validate() { 
    if (document.getElementById('@Html.EditorFor(model => model.Draw)').checked) { 
     alert("checked") 
    } else { 
     alert("You didn't check it! Let me check it for you.") 
    } 
} 

試圖與腳本來測試它但我不知道editorfor我不能確定做什麼的ID。

回答

5

如果使用CheckBoxFor代替EditorFor(這是一個通用的助手),您可以輕鬆地添加通過方法重載HTML屬性。添加一個ID可以讓你從你的JavaScript訪問它。

<div class="editor-field"> 
    @Html.CheckBoxFor(model => model.Draw, new { ID = "cbxDraw" }) 
    @Html.ValidationMessageFor(model => model.Draw) 
</div> 

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#cbxDraw').on('change', function() { 
     var $cbx = $(this), 
      isChecked = $cbx.is(':checked'); 

     $cbx.closest('.editor-field') 
      .siblings() 
      .find(':input') 
       .prop('disabled', isChecked); 
    }); 
}); 
</script> 

(注:此示例使用jQuery的)

+0

這是完美的,但它也使保存按鈕不可編輯有沒有辦法讓這種情況不發生?乾杯。 –

+1

沒關係,我只是給了其他學生一門課並且禁用了這些課。乾杯。 –

5

ASP.NET MVC 4有新的NameExtensions類,它提供了IdForNameFor方法。您可以使用它像這樣:

document.getElementById('@Html.IdFor(model => model.Draw)') 
+0

我不知道MVC提供此,感謝我一定會在未來使用這些。 –