ASP.NET检测是否禁用了Javascript字段

时间:2012-10-30 16:32:22

标签: javascript asp.net

我希望有一个答案......

设置: 非常复杂的ASP.NET应用程序执行大量用户交互,其中一些要求Javascript在单击其他字段时禁用某些字段(必须在Javascript中执行,b / c ASP.NET中的回发问题使其无法实现,所以客户端)。

这个代码在Javascript做经典之前很好    document.getElementById(currObj).disabled = true;

问题: 当我准备提交页面时,如果某个字段(文本框或单选框)已被禁用客户端,如何通知ASP.NET(C#),因此它不在表单中提交该字段? 这甚至可能吗?

提前多多谢谢!

2 个答案:

答案 0 :(得分:0)

任何已禁用的字段都不会提交,但是正常甚至是隐藏字段都会提交。这是禁用字段的工作方式。

<input type="text" name="Test_1" value="off" disabled="disabled" />
<input type="text" name="Test_2" value="on" />
<input type="hidden" name="Hidden_1" value="hide_off" disabled="disabled" />
<input type="hidden" name="Hidden_2" value="hide" />

在该示例中,只有Test_2Hidden_2会提交,因为其他人已被停用。

你可以在这个jsfiddle中看到它:http://jsfiddle.net/bJ7Rq

答案 1 :(得分:0)

ASP.NET知道控件已被禁用的唯一方法是从.NET禁用它并且Enabled = false属性已写入ViewState。在客户端禁用字段时,情况并非如此,因此ASP.NET将保留默认的Enabled值。

正如之前的评论者所提到的,禁用字段的值将完全排除在回发后发送到服务器的POST正文中。对于网页上的基本TextBox,这意味着Text属性将恢复为String.Empty。为了区分启用字段中的空字符串和实际禁用字段,我认为您需要直接查看Request.Form对象以查看密钥是否存在。例如,如果我在空白页面上有一个名为TextBox的{​​{1}},则对于已停用的字段,myTextBox将为Request.Form["myTextBox"]。对于启用的字段,它是字段包含的任何字符串值,包括null(如果它是空白的)。当然,如果控件位于命名容器(例如,String.Empty或其他东西)中,并且在HTML中的实际字段上使用ContentPlaceholder属性混乱,则需要使用完整的HTML { {1}}。

例如:

name

它不优雅,但它应该完成工作(不包括复选框,如果没有选中框,也会name。)