ASP.NET文本框在禁用时无法发送值

6

我需要使用jQuery来启用和禁用文本框,这个功能非常良好。禁用的文本框中有值。但是我面临的问题是,禁用的文本框不会将值传递到服务器。当我使用jQuery启用它时,在后端代码中可以看到文本框的值(调试模式)。有任何想法为什么会发生这种情况或者从禁用的文本框中获取值的替代方法。

HTML:

 <asp:TextBox ID="txtUniqueNo" runat="server" onkeyup = "OnChange(this)" required/>

我使用的Javascript用于禁用视图页面。
var inputBox = $("#<%=txtUniqueNo.ClientID%>");
inputBox.prop('disabled', true);

谢谢

5个回答

18

原因很简单,由于 web 浏览器提交限制策略,禁用 输入的值不会被提交到服务器。

W3 规范指出,被禁用的输入标签是无效的,不应该被提交。

相反地,请使用 readonly 属性:

<input type="text" readonly />

或者使用jQuery:

$("#<%=txtUniqueNo.ClientID%>").attr('readonly', 'readonly');

更新:

如果需要,查看如何去除readonly属性:http://jsfiddle.net/ynevet/84HrM/


谢谢,这个解决了问题。我在代码后端中获取了值,如何从文本框中移除readonly属性?我正在使用inputBox.removeAttr('readonly'),这样做正确吗? - Dave
如果要像禁用模式一样更改背景,请添加以下内容:txtBox.style.backgroundColor =“#EBEBE4”; - ZerOne

3
如果文本框已被禁用,则不会将其发送回服务器。将标签设置为文本框的值,并将隐藏字段也设置为该值。

来自参考文献:

我们将使用几种方法来实现

  • 在将值发送到服务器端后禁用文本框(或启用文本框并最终发送值后禁用文本框

  • textbox的值存储到任何其他控件中,使用控件(span)来隐藏,并获取隐藏的控件(span)的值以发送到服务器端'

  • 你可以使用 隐藏字段 来存储文本框的值,以便将这些值发送到服务器端...

  • 或者使用readonly属性代替启用和禁用属性


谢谢。readonly属性完成了我的工作,虽然你的信息很有用,我已经点赞了。 - Dave

0
var inputBox = $("#<%=txtUniqueNo.ClientID%>");
inputBox.prop('readonly', true);

或者

inputBox.prop('readonly', false);

现在服务器可以读取文本框的值


0

当你想要禁用时,尝试使用样式中的disabled而不是Enable属性,并在想要启用时更改属性值。


0

在提交之前通过JavaScript/jQuery启用,然后再从服务器上禁用。


1
请注意:非常简短的答案和/或是回复提问者的问题应该作为评论。您只需要50个声望点就可以在问题下发表评论 - 您能将此移动到那里吗? - Tyler2P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接