Ant*_*ony 23 asp.net checkbox client postback
我们有一个最初禁用和检查的复选框.然后通过javascript在客户端启用它.如果用户然后取消选中该框并按下按钮以调用回发,则复选框的状态在服务器端保持为已选中状态.这显然是不受欢迎的行为.这是一个例子.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="testcb.aspx.cs" Inherits="ESC.testcb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<script type="text/javascript">
function buttonClick() {
var cb = document.getElementById('<%= CheckBox1.ClientID %>');
cb.disabled = false;
cb.parentNode.disabled = false;
}
</script>
<div>
<asp:CheckBox ID="CheckBox1" runat="server" Checked="true" Enabled="false" />
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="buttonClick(); return false;" />
<asp:Button ID="Button2" runat="server" Text="Button2" OnClick="button2Click" />
</div>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
和服务器端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ESC
{
public partial class testcb : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void button2Click(object sender, EventArgs e)
{
string h = "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们在"字符串h"行中断并检查CheckBox1.Checked的值.确实如此,即使它在表格上未经检查.
Sam*_*Sam 34
这是ASP.NET的一个已知问题 - 由于某种原因,如果在页面加载期间禁用了ASP.NET而不检查回发,则ASP.NET不会更新回发时的复选框.我不知道为什么会这样 - 如果您默认选中未选中复选框并选择它,则会在服务器上正确更改该值.
解决方法是向页面添加一个表示复选框状态的隐藏字段,然后在单击复选框时将字段值更新为"ON"或"OFF".
然后在服务器上检查隐藏字段的值,而不是复选框本身,因为始终会发布隐藏字段.
小智 14
我有一个类似的问题,CheckBox对象的Checked属性没有正确更新,以获得您可以检查的实际发布值:
Request.Form[CheckBox1.UniqueID]
Run Code Online (Sandbox Code Playgroud)
如果选中该框,它将为'on',否则为null.
| 归档时间: |
|
| 查看次数: |
35353 次 |
| 最近记录: |