1

我希望有一个答案...

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

该代码在 Javascript 执行经典 document.getElementById(currObj).disabled = true; 的地方都很好。

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

非常感谢提前!

4

2 回答 2

0

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

正如之前的评论者所提到的,禁用字段的值将完全排除在回发时发送到服务器的 POST 正文中。在页面上的基本情况下TextBox,这意味着该Text属性将恢复为String.Empty. 为了区分启用字段中的空字符串和实际禁用字段,我认为您需要直接查看Request.Form对象以查看键是否存在。例如,如果我在空白页上有一个TextBox名字,那将是一个禁用的字段。对于启用的字段,它将是该字段包含的任何字符串值,包括它是否为空白。当然,如果控件位于与myTextBoxRequest.Form["myTextBox"]nullString.EmptyContentPlaceholdernameHTML 中实际字段的属性,您需要使用完整的 HTML name

例如:

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

它并不优雅,但它应该可以完成工作(不包括复选框,null如果未选中该框也是如此)。

于 2012-10-31T19:45:32.250 回答
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

于 2012-10-30T16:43:08.633 回答