当 TextMode 为 MultiLine 时,将 ASP.NET TextBox 屏蔽为密码

问题描述 投票:0回答:2

我有一个 ASP.NET

TextBox
,其中
TextMode
设置为
MultiLine
TextBox
的内容应显示为密码而不是纯文本。

无法同时将

TextMode
设置为
Password
MultiLine
。有没有其他方法可以实现这一目标?

asp.net webforms
2个回答
0
投票

你必须在这里做出一些“妥协”。

因此,当用户键入时,您不会看到“*”,但他们也不会看到他们键入的内容。

因此,放入一个文本框,设置 mode =“多行”,从而得到此标记:

        <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"
            style="color: transparent;text-shadow: 0 0 8px rgba(0,0,0,0.5);"
            Height="213px" Width="307px"                               
            ></asp:TextBox>

所以,我们给文本添加了模糊效果,结果实际上相当不错:

例如这个:

如果你不妥协一点,那么你可以找到一些“混乱”的 JavaScript 解决方案。然而,我认为上面的方法有效并且看起来和带有“*”的密码框一样好/漂亮。

还有这样的文本框?好吧,我不知道为什么有人想要这个(也许是一个发送一些秘密消息的屏幕)。

所以,尝试上面的方法,我认为这是一个“合理”的解决方案。


0
投票

我认为在不找到低级解决方案的情况下,没有一种不平凡的方法可以实现这一目标。

  • 当您将

    TextBox.TextMode
    设置为
    Password
    时,会出现
    <input type="password"/>

  • 当您将

    TextBox.TextMode
    设置为
    MultiLine
    时,会出现
    <textarea/>

HTML 元素呈现给客户端。

问题在于

TextArea
HTML 元素不支持密码字符。但有一个合理的解决方法:使用CSS样式模糊
TextBox
字符。首先将一个新项目(Web Forms Server Control)添加到您的项目中并对其进行修改,使其看起来像:

using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestAspNetWebApp
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:SecretTextArea runat=server></{0}:SecretTextArea>")]
    public class SecretTextArea : TextBox
    {
        public SecretTextArea()
        {
            TextMode = TextBoxMode.MultiLine;
            Attributes.CssStyle.Add("color", "transparent");
            Attributes.CssStyle.Add("text-shadow", "0 0 4px rgba(0,0,0,0.5)");

            Text = "This is a semi-secret text.";
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
    }
}

构建您的项目。将

SecretTextArea
控件从 VS Toolbox 拖放到 Web 表单中。结果是:

这种模糊方法的优点是可以查看和编辑文本。您还可以通过更改

px
属性中的
text-shadow
值来设置模糊量。

© www.soinside.com 2019 - 2024. All rights reserved.