如何保护asp:文本框不受用户输入影响?
禁用
<asp:TextBox ID="txbx" runat="Server" Text="1" Enabled="false" />
保护
<asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true" />
我希望保护上面的文本框免受用户输入的影响,但仍允许使用javascript更新该值。
这样可以正常运行,这是什么问题?
问题
如果文本框为disabled
或readonly
,则更新后的值不会在提交时发布到服务器!
问题
如何创建可同时使用的文本框:
对用户可见。
防止用户输入。
使用javascript进行更新。
将更新后的值发布到服务器。
ANSWER
发生冲突是因为当您在控件上设置enabled="false"
时,它不会将值传递给服务器。
但是,设置disabled
或readonly
客户端不会导致此问题。
您可以使用以下方式设置客户端属性:
代码:
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" />
答案 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>
不会发送已禁用输入的数据。
我的个人解决方案:
使用原始值编写新字段并将其禁用,仅用于显示。
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>
将更新后的值发布到服务器 与上述相同