2016-08-16 110 views
3

我有我使用下面的html helper字段,我的問題我需要使複選框被選中時,這些hiddenfor元素不隱藏。MVC的HTML幫手改變hiddenfor屬性

@Html.HorizontalFormFieldFor(model => model.InsaatHizmetBedeli) 
<div class="control-group"> 
    @Html.LabelFor(model => model.tadilatMi, new { @class = "control-label" }) 
    <div class="controls"> 
     @if (!Model.tadilatMi.HasValue) 
     { 
      Model.tadilatMi = false; 
     } 
     @Html.CheckBoxFor(model => model.tadilatMi.Value, new { @Name="tadilatmi" }); 
    </div> 
</div> 
@Html.HiddenFor(model => model.myHiddenProperty) 

這裏是我的jQuery代碼:

$("input[name='tadilatmi']").on("change", function() {  
    if ($("input[name='tadilatmi']").is(":checked")) { 
     $("#myHiddenProperty").show() 
    } 
}) 
當然

它不工作。我怎樣才能做到這一點?

回答

1

您生成的輸入始終是隱藏的type="hidden"。該jQuery.show()方法是用於切換與display:none;風格元素及其變化它的顯示器display:block;

你可以通過改變type屬性

if ($("input[name='tadilatmi']").is(":checked")) { 
    $("#myHiddenProperty").attr('type', 'text') 
} 

,或者使輸入type="text"和其樣式,這樣做,因爲隱藏

@Html.TextBoxFor(model => model.myHiddenProperty) 

與下面的CSS

#myHiddenProperty { 
    display: none; 
} 

然後您的原始腳本將工作。

但要切換的知名度回來,如果該複選框,然後選中,在這種情況下,你應該有一個else

if ($("input[name='tadilatmi']").is(":checked")) { 
    $("#myHiddenProperty").show() 
} else { 
    $("#myHiddenProperty").hide() 
} 

附註我懷疑:你爲了讓使用一個可怕的黑客您複選框綁定到nullable bool屬性(通過引導name屬性)和您的label甚至不作爲label(點擊它不會切換checkbox)。我建議你使用一個視圖模型

public bool Tadilatmi { get; set; } 

,並在視圖中只使用

@Html.LabelFor(m => m.Tadilatmi , new { @class = "control-label" }) 
<div class="controls"> 
    @Html.CheckBoxFor(m => m.Tadilatmi); 
</div> 

並更改腳本(這是更有效)

var hiddenElement = $('#myHiddenProperty'); 
$('#tadilatmi').change(function() {  
    if ($(this).is(":checked")) { 
     hiddenElement.show() 
    } else { 
     hiddenElement.hide() 
    } 
}) 

myHiddenProperty特性都可那麼包括foolproof[RequiredIfTrue("Tadilatmi")]或類似的條件驗證屬性。