当我更改其背景色时,文本框的前景色会重置,反之亦然(使用 PostBack)

The forecolor of textbox is reset when I change its backcolor, vice versa (with PostBack)

我有一个多行文本模式的主文本框,还有两个彩色文本模式的文本框,一个用于更改文本颜色,另一个用于更改主文本框的背景颜色。

问题是如果我在更改文本颜色后更改背景颜色,文本颜色将被黑色覆盖(我想这是默认颜色),或者如果我在更改文本颜色后更改文本颜色背景颜色,背景颜色将被白色覆盖(我猜是默认颜色)。

我知道文本框值是通过 PostBack 请求发送的,但我认为 ViewState 应该存储文本框的控制信息。如果我为主文本框显式启用 ViewState,它仍然不会。

我可以用某种方式解决这个问题。但是,为什么会这样呢?

更新

我查看了这个资源:http://www.c-sharpcorner.com/UploadFile/ee01e6/viewstate-for-textbox-in-Asp-Net/

当我使用单选按钮时,它起作用了。如果我使用文本框作为颜色选择器,那么它不起作用。

当文本模式设置为颜色时,这是文本框的错误吗??

这是主文本框:

    <asp:TextBox ID="txt_Editor"
        TextMode="MultiLine"
        Columns="50" Rows="10"
        EnableViewState="true"
        runat="server"></asp:TextBox>

这是两个:

    <div class="text-muted">Color Options:</div>
    Text-color:
    <asp:TextBox ID="txt_TextColor" 
        AutoPostBack="true" TextMode="Color"
        Text="#000000" runat="server" OnTextChanged="txt_TextColor_TextChanged">
    </asp:TextBox>

    Background-color:
    <asp:TextBox ID="txt_BackColor"
        TextMode="Color" AutoPostBack="true"
        Text="#FFFFFF" runat="server" OnTextChanged="txt_BackColor_TextChanged"></asp:TextBox>

这是 CodeBehind 文件中的相关部分,无论何时选择颜色,主文本框的颜色都应相应更新:

    protected void txt_TextColor_TextChanged(object sender, EventArgs e)
    {
        txt_Editor.ForeColor = Color.FromName(txt_TextColor.Text);
    }

    protected void txt_BackColor_TextChanged(object sender, EventArgs e)
    {
        txt_Editor.BackColor = Color.FromName(txt_BackColor.Text);
    }

您需要在隐藏字段或视图状态中捕获颜色并在回发后进行检查。

知道了,这个问题与文本框和 ViewStates 无关,它是 Color.FromName,如果你改用 ColorTranslator.FromHtml 它会完美地工作,所以我想颜色从 [=20 返回=] 确实无效。

真是个奇怪的错误。

编辑: 好的,所以我检查了生成的颜色,这并不是真正的错误,FromName 必须仅用于命名颜色 "red","blue", 等等,如果你以这种方式使用它,它会创建一个具有这些属性的颜色(值是示例)“{Name=#6bea55, ARGB=(0, 0, 0, 0)}”,正如你可以看到的名称有一个前缀 # 并且 RGB 值全为零,因为它无法解析它,但是如果您使用转换器,那么它会创建这样的颜色 "{Name=ff6bea55, ARGB=(255, 107, 234, 85)} ",所以在幕后发生的事情是 HTML 渲染器正在使用名称 属性 来填充样式 属性 的值,但是 ViewState 正在存储 ARGB 值,当您执行回发它恢复那些 ARGB 值,因此颜色丢失。