在客户端仍然启用通过服务器端禁用的控件为什么?

时间:2014-03-10 15:33:38

标签: c# javascript jquery asp.net .net

我有一个.net控件。我正在使用attribute属性禁用控件的列表项。 在客户端进行验证我正在检查控件是启用还是禁用。 写入的j查询仍然表示控件已启用,即使它已被禁用并触发警报。 我有点挣扎,任何人都可以帮助我。

这是我的代码

    private void EnableDisableControl(ListControl control, Boolean value)
    {
        if (value == true)
        {
            foreach (ListItem item in control.Items)                {
                item.Attributes.Remove("checked");
                item.Attributes.Add("disabled", "disabled");
            }
        }
        else
        {

            foreach (ListItem item in control.Items)
            {
                item.Attributes.Remove("disabled");

            }
        }

    }

我使用此功能来禁用我的一个控件

    EnableDisableControl(rdb_control, true);

这是jquery

   if ($("#<%=rdb_control.ClientID%> input[type='radio']").is(':enabled')) {
                if ($("#<%=rdb_control.ClientID%> input[type='radio']:checked").length == 0) {
       alert("Required");                        
                }

            }

这里即使控制功能被禁用,我仍然会收到警报。而它甚至不应该检查控件是否被禁用。

这是它看起来禁用跨度

的HTML
   <table id="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control" class="chklistUnknown" border="0">
                    <tr>
                        <td><span disabled="disabled"><input id="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control_0" type="radio" name="ctl00$m$g_c09fd465_0ae4_479b_8fc6_21a7de645003$ctl00$rdb_control" value="Yes" /><label for="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control_0">is</label></span></td>
                    </tr><tr>
                        <td><span disabled="disabled"><input id="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control_1" type="radio" name="ctl00$m$g_c09fd465_0ae4_479b_8fc6_21a7de645003$ctl00$rdb_control" value="No" /><label for="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control_1">not</label></span></td>
                    </tr><tr>
                        <td><span disabled="disabled"><input id="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control_2" type="radio" name="ctl00$m$g_c09fd465_0ae4_479b_8fc6_21a7de645003$ctl00$rdb_control" value="Unknown,Yes" /><label for="ctl00_m_g_c09fd465_0ae4_479b_8fc6_21a7de645003_ctl00_rdb_control_2">Unknown</label></span></td>
                    </tr>
                </table>  

1 个答案:

答案 0 :(得分:0)

嗯,问题出在您的服务器端代码中。您正在禁用无法禁用的span元素。当您的jQuery询问您的radiobuttons是否已启用时,答案是肯定的......因为它们已启用。没有radiobutton具有disabled属性。

您必须更改服务器方法并在控制树中进一步挖掘以查找和禁用inputs,而不是spans

CheckListControl具有Enabled属性。只需将其设置为false

即可
private void EnableDisableControl(ListControl control, Boolean value)
{
    control.Enabled = value;
}

它应该自动禁用复选框。

相关问题