asp.net服务器端禁用在客户端启用Radiobutton

Mat*_*u G 6 html javascript vb.net asp.net jquery

我对asp.net启用的radiobutton状态有一个奇怪的问题.

.aspx页面中的代码:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="testradioButton.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#radYes').change(function () { gererEtat(); });
            $('#radNo').change(function () { gererEtat(); });
        });
        function gererEtat() {
            $('#radDisabledYes').prop('disabled', !$('#radYes').prop('checked'));
            $('#radDisabledNo').prop('disabled', !$('#radYes').prop('checked'));
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:radiobutton ID="radYes" runat="server" GroupName="test" Text="yes"></asp:radiobutton>
        <asp:radiobutton ID="radNo" runat="server" GroupName="test" Text="No"></asp:radiobutton>
    </div>
    <div>
        <asp:radiobutton ID="radDisabledYes" runat="server" GroupName="test2" Text="yes"></asp:radiobutton>
        <asp:radiobutton ID="radDisabledNo" runat="server" GroupName="test2" Text="No"></asp:radiobutton>
    </div>
    <asp:LinkButton ID="lnktoto" runat="server" Text="Submit"></asp:LinkButton>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

和代码背后:

Public Class WebForm1
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        radDisabledYes.Enabled = radYes.Checked
        radDisabledNo.Enabled = radYes.Checked
    End If
    Stop
End Sub

Private Sub Radiobutton1_CheckedChanged(sender As Object, e As EventArgs) Handles radYes.CheckedChanged, radNo.CheckedChanged
    radDisabledYes.Enabled = radYes.Checked
    radDisabledNo.Enabled = radYes.Checked
End Sub

Private Sub lnktoto_Click(sender As Object, e As EventArgs) Handles lnktoto.Click
    Stop
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

在服务器端,我在第一次加载时禁用单选按钮.我在javascript中有相同的条件.所以在客户端,如果用户单击是,我启用一些控件.我在服务器端做同样的事情.除了Radio Button之外,它适用于所有类型的控件.

假设在加载时,我禁用单选按钮.在客户端,基于用户输入,我启用它们(在javascript中).用户选中了一个单选按钮并提交了页面.在服务器端,单选按钮被禁用并取消选中.我有代码检查条件并启用它.但仍未检查单选按钮.我理解为什么,服务器忽略已检查状态,因为一开始它认为它被禁用.有没有办法让这项工作?我知道服务器正在接收检查状态,因为当我检查Request.Form时,我看到radDisable = Yes.

谢谢你的帮助.

dan*_*ana 1

这是您正在寻找的黑客:)

Public Class WebForm1
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If radYes.Checked Then
        radDisabledYes.InputAttributes.Remove("disabled")
        radDisabledNo.InputAttributes.Remove("disabled")
    Else
        radDisabledYes.InputAttributes("disabled") = "disabled"
        radDisabledNo.InputAttributes("disabled") = "disabled"
    End If
    Stop
End Sub

Private Sub Radiobutton1_CheckedChanged(sender As Object, e As EventArgs) Handles radYes.CheckedChanged, radNo.CheckedChanged
    ' not really needed anymore, but lets leave it in here for fun!
End Sub

Private Sub lnktoto_Click(sender As Object, e As EventArgs) Handles lnktoto.Click
    Stop
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

这实质上绕过了 .NET 关于禁用控件的安全检查。控件仍然会适当地启用/禁用,但您这样做不会弄乱属性WebControl.Enabled。