如何保护asp:textbox不受用户输入的影响?

时间:2014-02-28 13:49:45

标签: c# asp.net vb.net readonly disabled-control

如何保护asp:文本框不受用户输入影响?

禁用

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

保护

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

我希望保护上面的文本框免受用户输入的影响,但仍允许使用javascript更新该值。

这样可以正常运行,这是什么问题?

问题

如果文本框为disabledreadonly,则更新后的值不会在提交时发布到服务器!

问题

如何创建可同时使用的文本框:

  • 对用户可见。

  • 防止用户输入。

  • 使用javascript进行更新。

  • 将更新后的值发布到服务器。


ANSWER

发生冲突是因为当您在控件上设置enabled="false"时,它不会将值传递给服务器。

但是,设置disabledreadonly客户端不会导致此问题。

您可以使用以下方式设置客户端属性:

代码

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

或使用客户端控件并将其设置为runat server:

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

6 个答案:

答案 0 :(得分:7)

我曾经从代码隐藏中设置ReadOnly属性,从而摆脱了这种情况。你可以尝试一次。

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

Page_Load事件中添加此行代码。

请告知是否适合您。

答案 1 :(得分:0)

由于某种原因不是很清楚,但ASP.NET有一个特殊的属性来控制是否将禁用的控件发送回服务器:HtmlForm.SubmitDisabledControls

所以你需要做的就是为true控件将此属性设置为Form

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

答案 2 :(得分:0)

在我看来,最简单的解决方案是使用隐藏字段并在回发时读取,这样受保护的文本框就是装饰性的,实际的逻辑是使用隐藏字段。

那就是说,ReadOnly = true仍应该用于回发,只有Enabled = false才能回发该值。

答案 3 :(得分:0)

您可以使用html input元素,并将runat属性设置为server,以便从server引用该元素,如下所示:

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

其值,将在客户端更改后发送到服务器,同时设置为readonly

答案 4 :(得分:-1)

注意:<form>不会发送已禁用输入的数据。

我的个人解决方案:

  • 使用JS
  • 使原始字段不可见
  • 使用原始值编写新字段并将其禁用,仅用于显示。

    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>";
    

答案 5 :(得分:-2)

对用户可见。

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

防止用户输入。

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

使用javascript进行更新 创建一个函数并使用像

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

将更新后的值发布到服务器 与上述相同