慎用客户端的disabled属性......
由于表单的修改由两种用户操作,分别能修改的项是不一样的,但都可以查看。
设想实现一个修改方法,两种用户修改保存后都调用这个方法作保存操作,然后在客户端判断不同的用户然后把部分控件disabled掉。结果出现在客户端disabled掉的控件在服务器端得到的值为""的问题了,刚开始不解,写了个测试程序也是这样的,想来想去,可能是disabled后控件的viewstate也不可用了,所以在服务器端就得不到其值了。测试代码如下:
//服务器
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
this.TextBox1.Text = "guoguo";
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write("<script>alert('"+this.TextBox1.Text +"')</script>");
}
//客户端
<script language=javascript>
function window_load()
{
Form1.TextBox1.disabled = true;
}
</script>
<body MS_POSITIONING="GridLayout" onload="window_load();">
设想实现一个修改方法,两种用户修改保存后都调用这个方法作保存操作,然后在客户端判断不同的用户然后把部分控件disabled掉。结果出现在客户端disabled掉的控件在服务器端得到的值为""的问题了,刚开始不解,写了个测试程序也是这样的,想来想去,可能是disabled后控件的viewstate也不可用了,所以在服务器端就得不到其值了。测试代码如下:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
点击按钮得到的是""值。
解决办法:把客户端的禁用功能放到服务器端实现就可以了。
在page_load()中加入
this.TextBox1.Enabled = false;
除掉客户端的onload="window_load();"就可以了。
**************************************
可能许多人早就知道了,但我确实是今天才发现了,费了我不少霎时间。平时做页面好少,
都是写中间层代码,感觉asp.net还不熟。