最初に無効になっているチェックボックスがチェックされています。その後、javascriptを使用してクライアント側で有効になります。ユーザがボックスのチェックを外してボタンを押してポストバックを呼び出すと、チェックボックスの状態はサーバ側でチェックされたままになります。これは明らかに望ましくない動作です。ここに例があります。ASP.Netポストバック時のチェックボックスの値が間違っていますか?
<%@ 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>
とサーバーサイドコード:
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 = "";
}
}
}
だから我々は「文字列H」のラインで破るとCheckBox1.Checkedの値を確認してください。それがフォーム上でチェックされていなくても、それは本当です。
、それを有効にするには、ページのどこかに、この単純な機能を追加するには、送信ボタンに次のパラメータを追加します。コードの背後からコントロールのプロパティ。 –
サーバーコントロールの代わりにHTMLコントロールを使用して、私はあなたの問題が解決されたと信じています。 –
@Kamran、Viewstateは問題ではありません。 –