如何基于枚举单选按钮选择.NET MVC隐藏输入字段

时间:2014-11-08 04:59:06

标签: c# jquery razor model-view-controller enums

我使用MVC Razor技术在C#中开发了一个页面,我的代码正在关注

<div class="col-md-4">
                <label for="" class="control-label">
                    IDMS Reference <font color="red">*</font></label><br />
                 <div class="radio col-md-4">
                     @Html.EnumRadioButtonFor(m => m.enumIDMSReference, false).DisableIf(() => 
                                                                          Model.IdmsRef == 2)

                </div>

 <div  class="col-md-4">
                <label for="" class="control-label">
                    IDMS Reference Number <font color="red">*</font></label><br />
                @Html.TextBoxFor(m => m.IdmsRefNo, new { @class = "form-control"  
                                            }).DisableIf(() => Model.InwardBranch == true)
</div>

我的Enum课程正在关注,

public enum enumIDMSReference
{
    [Description("Applicable")]
    Applicable = 1,

    [Description("Not Applicable")]
    NotApplicable = 2,

}

如果我们点击Not Applicable单选按钮,那么IDMS Reference Number输入字段应该是禁用的,输入IdmsRefNo字段应仅对适用的单选按钮启用,那么如何在JQuery或任何其他解决方案中执行? 请任何人帮忙

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想根据所选的无线电选项禁用一个字段。您可以绑定单选按钮的更改事件,并相应地禁用/启用文本框。 [.NET FIDDLE]

$('input[name="enumIDMSReference"]').change(function() {
    if ($(this).is(':checked') && $(this).val() == 'NotApplicable') {
        $('#IdmsRefNo').attr('disabled', 'disabled');
    } else {
        $('#IdmsRefNo').removeAttr('disabled');
    }
});

你可以像这样迭代你的枚举值(我不检查空值,你可以自己做):

@foreach (var value in Enum.GetValues(Model.enumIDMSReference.GetType()))
{
    var memInfo = Model.enumIDMSReference.GetType().GetMember(value.ToString());
    var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
    var description = ((DescriptionAttribute)attributes[0]).Description;

     @Html.RadioButtonFor(m => m.enumIDMSReference, value);
     @Html.Label(description);
     @Html.Raw("<br />");
}

您可以通过默认服务器端禁用/启用文本框来进一步扩展,具体取决于enumIDMSReference的值。