Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET检测是否禁用Javascript字段_Javascript_Asp.net - Fatal编程技术网

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

ASP.NET检测是否禁用Javascript字段,javascript,asp.net,Javascript,Asp.net,我希望有一个答案 设置: 相当复杂的ASP.NET应用程序执行大量用户交互,其中一些需要Javascript在单击其他字段时禁用某些字段(必须在Javascript中执行,b/c ASP.NET中的回发问题使其无法执行,因此必须在客户端执行) 这段代码与Javascript的经典代码完全相同 document.getElementById(currObj).disabled=true 问题: 当我准备提交页面时,如果某个字段(文本框或无线框)在客户端被禁用,则如何使ASP.NET(C#)注意到它

我希望有一个答案

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

这段代码与Javascript的经典代码完全相同 document.getElementById(currObj).disabled=true

问题: 当我准备提交页面时,如果某个字段(文本框或无线框)在客户端被禁用,则如何使ASP.NET(C#)注意到它不在表单中提交该字段? 这可能吗


非常感谢

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

<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中看到它在工作:

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

正如前面的评论者所提到的,禁用字段的值将从回发时发送到服务器的帖子正文中完全排除。对于页面上的基本
TextBox
,这意味着
Text
属性将恢复为
String.Empty
。要区分启用字段中的空字符串和实际禁用字段,我认为您需要直接查看
Request.Form
对象以查看键是否存在。例如,如果我在空白页上有一个名为
myTextBox
TextBox
Request.Form[“myTextBox”]
对于禁用的字段将为
null
。对于启用的字段,它应该是该字段包含的任何字符串值,包括
string.Empty(如果为空)。当然,如果控件位于命名容器(例如,
ContentPlaceholder
或其他东西)中,该容器与HTML中实际字段的
name
属性相冲突,则需要使用完整的HTML
name

例如:

bool fieldIsEnabled = Request.Form["myTextBox"] == null;

它并不优雅,但应该可以完成任务(不包括复选框,如果未选中复选框,复选框也将为
null

禁用的字段不会自动以表单形式提交。您不能检查C#中的
.Enabled
属性吗?我忘了用客户机设置它是否真的会传播到服务器(我猜不会)。无论如何,当控件被禁用时,可以将隐藏变量的值设置为控件的ID,然后在服务器上检查该值。您还可以检查ID是否在发布的查询字符串中(而不是使用
Textbox1.Enabled
)-它只有在未禁用的情况下才会出现。Hmm。。Asp.net似乎并不关心它们被禁用(或者它没有注意到b/c Javascript在没有回发的情况下进行了更改),这就是我的观点,即使Javascript禁用了它,它也会提交它们。@WinFiddle如果Asp不使用简单的表单提交(这将尊重禁用状态)那么它就比我想象的更倒退了。@TheZ:很确定信息(禁用状态等)来自ViewState,而不是表单本身。如果使用Request.Form,它将与任何其他sane框架一样,不包括禁用的输入;)(IIRC)啊,好的旧请求。旧ASP时代的表单,我忘了它仍然适用于.NET framework。。。非常有趣的方法,谢谢乔治!不客气!如果这是你最终得到的解决方案,请随时为未来的读者接受这个答案。如果你发现了更好的东西,请分享