我希望有一个答案......
设置: 非常复杂的ASP.NET应用程序执行大量用户交互,其中一些要求Javascript在单击其他字段时禁用某些字段(必须在Javascript中执行,b / c ASP.NET中的回发问题使其无法实现,所以客户端)。
这个代码在Javascript做经典之前很好 document.getElementById(currObj).disabled = true;
问题: 当我准备提交页面时,如果某个字段(文本框或单选框)已被禁用客户端,如何通知ASP.NET(C#),因此它不在表单中提交该字段? 这甚至可能吗?
提前多多谢谢!
答案 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_2
和Hidden_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
。)