How to protect an asp:textbox from user input?

此生再无相见时 提交于 2019-12-11 02:49:16

问题


How to protect an asp:textbox from user input?

DISABLE IT

<asp:TextBox ID="txbx" runat="Server" Text="1" Enabled="false" />

PROTECT IT

<asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true" />

I wish to protect the textbox as above from user input but still allow the value to be updated with javascript.

This works fine so what's the problem?

THE PROBLEM

If a textbox is disabled or readonly the updated values will not post to the server when submitted!

QUESTION

How to create a textbox that can simultaneously:

  • Be visible to the user.

  • Be protect from user input.

  • Be updated with javascript.

  • Post updated value to server.


ANSWER

The conflict occurs because when you set enabled="false" on control it is does not pass the values to the server.

However setting disabled or readonly clientside does not cause this issue.

You can set the properties clientside by using:

In code behind:

txbx.Attributes.Add("ReadOnly", "ReadOnly")
txbx.Attributes.Add("disabled", "disabled")

or by using client side controls and setting them to runat server:

<input type="text" id="txbx" readonly="readonly" runat="server" />
<input type="text" id="txbx" disabled="disabled" runat="server" />

回答1:


I once got out of this situation by setting the ReadOnly property from code-behind. You can try this once.

txbx.Attributes.Add("ReadOnly", "ReadOnly");

Add this line of code in your Page_Load event.

Please inform if it works for you.




回答2:


The easiest solution, in my opinion, is to have a hidden field and read that on postback instead, that way the protected textbox is just cosmetic, the actual logic is working with a hidden field.

That said, ReadOnly = true should still work on postback, it's only Enabled = false which shouldn't postback the value.




回答3:


Not very well know for some reason, but ASP.NET has special property which controls if disabled controls being sent back to the server or not: HtmlForm.SubmitDisabledControls

So what you have to do is set this property to true for your Form control

<form id="form1" submitdisabledcontrols="true" runat="server">
    <asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true" Enabled="false" />
</form>



回答4:


you can use html input element instead, and set runat attribute to server to refer that from server ,like this:

<input type="text" name="name" id="text2" readonly="readonly" runat="server" />

its value, will be sent to server after its changed on client, while it has set as readonly




回答5:


Beware: <form> does not send data for disabled inputs.

My personal solution:

  • Make original field invisible with JS
  • Write new field with the original value and make it disabled, just for show.

    var status = document.getElementById("ElementID");
    status.style.visibility='hidden';
    var row = status.parentNode.parentNode;
    var newCol = row.insertCell(-1);
    newCol.innerHTML = "<div style='padding-left: 6px'><input readonly='readonly' type='text' size='50' value='" + status.value + "' class='inputReadOnly'/></div>";
    



回答6:


Be visible to the user.

<asp:TextBox ID="txbx" runat="Server" />

Be protect from user input.

<asp:TextBox ID="txbx" runat="Server" Text="1" Enabled="false" />
<asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true"  />

Be updated with javascript.
create a function and use like

<script type="text/javascript">
        var a = ($("#<%=txbx.ClientID%>"));
        a.value="assas";
</script>

Post updated value to server.
same as above



来源:https://stackoverflow.com/questions/22096984/how-to-protect-an-asptextbox-from-user-input

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!