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

时间:2015-08-29 03:31:50

标签: c# asp.net postback viewstate

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

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

我知道文本框值是使用PostBack请求发布的,但我认为ViewState应该存储文本框的控件信息。如果我明确地为主文本框启用ViewState,它仍然不会。

不知怎的,我可以解决这个问题。但是,为什么会这样?

更新

我已检查此资源:http://www.c-sharpcorner.com/UploadFile/ee01e6/viewstate-for-textbox-in-Asp-Net/

当我使用radiobuttons时,它可以工作。如果我使用文本框作为颜色选择器,则它不起作用。

与TextMode设置为Color ??

一起使用时,这是文本框的错误吗?

以下是主要文本框:

    <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);
    }

2 个答案:

答案 0 :(得分:1)

知道了,问题与文本框和ViewStates没有任何关系,它的Color.FromName,如果你使用ColorTranslator.FromHtml它可以很好地工作,所以我想从Color.FromName返回的颜色确实是无效的。

真的是一个奇怪的错误。

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

答案 1 :(得分:-1)

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