通过加载MVC复选框,选中以禁用文本框

时间:2014-12-24 07:58:52

标签: c# jquery asp.net-mvc razor

谁能帮助我。 将数据加载到mvc视图时,我将加载复选框的值,但如果为true,我将需要禁用2个文本框字段。

代码是我的for循环的一部分

@Html.TextBoxFor(m => m.Items[i].StartIntervalTime, "{0:HH:mm}", new {                   
               Value = Model.Items[i].Available ? "" : Model.Items[i].StartIntervalTime.ToString("HH:mm"),
               id = "startTime" + i                                      
})
<span>untill</span>
@Html.TextBoxFor(m => m.Items[i].EndIntervalTime, "{0:HH:mm}", new {
               Value = Model.Items[i].Available ? "" : Model.Items[i].EndIntervalTime.ToString("HH:mm"),
               id = "endTime" + i
})
@Html.CheckBoxFor(m => m.Items[i].Available, new { id = i, @class = "closedallday" })

我已尝试在textbox标签中使用“禁用”,就像我使用“value”一样,但即使没有值,禁用也会始终禁用文本框。所以..

Disabled = Model.Items[i].Available ? "disabled" : "",

我需要一个真正有效的解决方案。

谢谢Dinand

3 个答案:

答案 0 :(得分:2)

你可以做这样的事情:

//检查值是否为true,禁用文本框,否则正常绘制:

  if(m.Items[i].Availabl == true)
    {
     @Html.TextBoxFor(m => m.Items[i].StartIntervalTime, "{0:HH:mm}"
    , new {ANYTHINK ELSE, disabled="disabled" })
    }
    else
    {
    @Html.TextBoxFor(m => m.Items[i].StartIntervalTime, "{0:HH:mm}"
    , new {ANYTHINK ELSE })
    }

答案 1 :(得分:1)

我会使用jQuery来捕捉复选框中的更改,然后更改文本框。这是一个有效的jsfiddle

<强>的jQuery

$('#checkbox').on("change", function () {
    if ($(this).is(":checked")) {
        textbox.addClass('disabled');
        textbox.val("");
        textbox.prop('disabled',true);
    }else {
        textbox.removeClass('disabled');
        textbox.prop('disabled',false);
    }
}

<强> CSS

.disabled {
    background-color:lightgray;
}

答案 2 :(得分:0)

只需使用jquery

即可
<script>
    jQuery(document).ready(function() {
        if ($("input:checkbox").is(":checked")) 
        {               
             $("input:text").prop("readonly", "readonly");
        }
    });
</script>
相关问题