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

C# 如何保护asp:textbox不受用户输入的影响?,c#,asp.net,vb.net,readonly,disabled-control,C#,Asp.net,Vb.net,Readonly,Disabled Control,如何保护asp:textbox不受用户输入的影响 禁用它 <asp:TextBox ID="txbx" runat="Server" Text="1" Enabled="false" /> <asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true" /> 或者使用客户端控件并将其设置为在服务器上运行: <input type="text" id="txbx" readonly="readonly"

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

禁用它

<asp:TextBox ID="txbx" runat="Server" Text="1" Enabled="false" />
<asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true" />
或者使用客户端控件并将其设置为在服务器上运行:

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

我曾经通过设置code behind的
ReadOnly
属性摆脱了这种情况。你可以试试这个

txbx.Attributes.Add("ReadOnly", "ReadOnly");
在您的
页面加载
事件中添加这行代码


请告知它是否适用于您。

我曾经通过设置code behind的
只读属性摆脱了这种情况。你可以试试这个

txbx.Attributes.Add("ReadOnly", "ReadOnly");
在您的
页面加载
事件中添加这行代码


请告知它是否适合您。

用户可以看到它

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

变量a=($)(“#”);
a、 value=“assas”;
将更新的值发布到服务器。

与上面相同,用户可以看到

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

变量a=($)(“#”);
a、 value=“assas”;
将更新的值发布到服务器。

与上面相同

由于某些原因,我们不太清楚,但是ASP.NET有一个特殊的属性,用于控制禁用的控件是否被发送回服务器:

因此,您需要为
窗体
控件将此属性设置为
true

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

由于某些原因,我们不太清楚,但ASP.NET具有特殊属性,用于控制禁用的控件是否发送回服务器:

因此,您需要为
窗体
控件将此属性设置为
true

<form id="form1" submitdisabledcontrols="true" runat="server">
    <asp:TextBox ID="txbx" runat="Server" Text="1" ReadOnly="true" Enabled="false" />
</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>";
    
    var status=document.getElementById(“ElementID”);
    status.style.visibility='hidden';
    变量行=status.parentNode.parentNode;
    var newCol=row.insertCell(-1);
    newCol.innerHTML=“”;
    
注意:
不会发送禁用输入的数据

我的个人解决方案:

  • 使用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>";
    
    var status=document.getElementById(“ElementID”);
    status.style.visibility='hidden';
    变量行=status.parentNode.parentNode;
    var newCol=row.insertCell(-1);
    newCol.innerHTML=“”;
    

    • 在我看来,最简单的解决方案是有一个隐藏字段,并在回发时读取该字段,这样受保护的文本框只是表面的,实际的逻辑是使用一个隐藏字段


      也就是说,
      ReadOnly=true
      应该仍然可以在回发时使用,只有
      Enabled=false
      不应该回发值。

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


      这就是说,
      ReadOnly=true
      仍应在回发时工作,只有
      Enabled=false
      不应回发值。

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

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

      它的值在客户端更改后将发送到服务器,而它已设置为
      只读

      您可以使用html
      输入
      元素,并将
      runat
      属性设置为
      服务器
      ,以从
      服务器
      引用该属性,如下所示:

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

      它的值在客户端更改后将发送到服务器,而它已设置为
      只读

      这是vb还是C#。我可以用visualbasic告诉你。您可以转换为C#然后,如果在C#中,则有许多VB到C#的转换器。您确定更新后的值不会回发吗?我使用了ReadOnly=“true”并使用jQuery进行了更新,但从来没有遇到过问题。@KashishArora VB更好,谢谢you@Mych是,删除readonly后,所有操作都正常。这是这里的后续文章:经过一点实验后,标准asp:TextBox不会在ReadOnly=True时回发客户端更新值,而Telerik Texbox控件会回发。我广泛使用Telerik,因此在出现此问题时感到困惑。这是vb还是C#。我可以用visualbasic告诉你。您可以转换为C#然后,如果在C#中,则有许多VB到C#的转换器。您确定更新后的值不会回发吗?我使用了ReadOnly=“true”并使用jQuery进行了更新,但从来没有遇到过问题。@KashishArora VB更好,谢谢you@Mych是,删除readonly后,所有操作都正常。这是这里的后续文章:经过一点实验后,标准asp:TextBox不会在ReadOnly=True时回发客户端更新值,而Telerik Texbox控件会回发。我广泛使用Telerik,因此在您遇到此问题时感到困惑。@DreamTeK当时在您的问题中提到了这一点,以及其他可能相关的细节。谢谢您的帮助。我没有添加此属性,因为在我之前的帖子中,我知道submitdisabledcontrols不会使用javascript提交更新的值。所以我写这篇文章是为了避免混淆@DreamTeK在你的问题中提到了这一点,以及其他可能相关的细节。谢谢你的帮助。我没有添加此属性,因为在我之前的帖子中,我知道submitdisabledcontrols不会使用javascript提交更新的值。所以我写这篇文章是为了避免混淆。我曾考虑过这一点,但希望有一个更高效的代码解决方案