这是我的程序
<script src="Scripts/jquery-1.6.4.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
function one() {
$(document).ready(function () {
$('#<%= textbox.ClientID %>').attr('disabled', 'disabled');
});
}
function two() {
$(document).ready(function () {
$('#<%= textbox.ClientID %>').attr('value', 'hello stackoverflow.com!');
});
}
</script>
<input type="button" value="one" onclick="one();" />
<input type="button" value="two" onclick="two();" />
<asp:TextBox ID="textbox" runat="server"></asp:TextBox>
<asp:Button ID="postbackButton" runat="server" Text="post back" />
当我点击“按钮1”时,文本框会切换为禁用。然后我点击“回发按钮”,文本框切换为启用(它丢失了我设置的内容!)。
当我点击“按钮2”时,文本框会更改其值。然后我点击“回发按钮”,文本框不会丢失其值。
如何保持按钮的禁用状态? 如果我能在客户端做到这一点,那就更好了。
非常感谢Luciano。
答案 0 :(得分:1)
ASP.Net通过ControlState跟踪您发布的值。如果您在后面的代码中设置了DISABLED状态(通过enabled = false),那么它将通过ViewState保留。如果您在ASPX页面中设置了它,它就是值。由于您是通过JS进行的,因此服务器无法知道它已被设置。
处理此问题的一种方法是,您可以执行以下操作:在隐藏字段中按名称保留已禁用文本框的列表。然后在帖子后面,你可以解析隐藏字段中的值,并在后面的代码中适当地设置文本框的启用状态,允许ViewState处理事情。
答案 1 :(得分:0)
的原因是 ViewState
。页面执行期间ASP.NET服务器控件的每个更改的属性值都将由ViewState
保存。阅读ViewState。
答案 2 :(得分:0)
简单的原因是你必须这样做。
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Enabled = true;
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Enabled = false;
}
在此处启用Load事件中的Enabled按钮,然后在单击第一个按钮时将其禁用。然后你点击第二个按钮,它将进行回发,它将进入Page_Load事件并启用按钮。
如果您只是删除TextBox1.Enabled = true;从Page_Load,PreInit,Init事件您将看不到此错误。
不要通过JS启用禁用。
答案 3 :(得分:0)
如果textbox
具有runat="server"
属性且是否已禁用,则您无法使用javascript
或jquery
更改其值。它只能在服务器端更改