【问题标题】:A controls disabled through server side is still enabled in client side why?通过服务器端禁用的控件仍然在客户端启用,为什么?
【发布时间】:2014-03-10 15:33:38
【问题描述】:

我有一个 .net 控件。我正在使用属性属性禁用控件的列表项。 在客户端进行验证,我正在检查控件是启用还是禁用。 编写的 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>  

【问题讨论】:

  • 你能发布来自服务器的 HTML 吗?在那里您可以查看您的服务器端方法是否有效。我们需要这些信息来确定问题出在 .NET 代码还是 javascript 代码中。
  • 我的服务器端方法正在运行,我看到带有禁用选项的控件。但是当我单击提交按钮时,它仍然会查找已启用的控件并触发警报,因为它不会检查任何内容。
  • 不过,看到那个 HTML 对我们来说还是非常有用的。否则我们无法知道出了什么问题(或者至少我不知道)。
  • 在它自己的问题中添加了 HTML
  • @user,不能禁用任意元素。只有表单控件可以。

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


【解决方案1】:

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

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

CheckListControl 有一个 Enabled 属性。只需将其设置为false:

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

它应该自动禁用复选框。

【讨论】:

  • 如何创建ListControl?使用设计师?通过代码?
  • 那是一个asp.net控件
  • 我知道,但 ListControl 可以包含多个内容。你如何添加复选框?
  • 这是asp.net checkboxlist控件,自动有复选框
  • 试试我在回答中提出的解决方案
猜你喜欢
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多