当我改变文本框的背景色时,文本框的前颜色会被重置,反之亦然(使用PostBack)
本文关键字:文本 反之亦然 使用 PostBack 改变 背景色 颜色 | 更新日期: 2023-09-27 18:10:28
我有一个多行文本模式的主文本框和另外两个彩色文本模式的文本框,一个是改变文本的颜色,另一个是改变主文本框的背景色。
问题是,如果我在更改文本颜色之后更改背景颜色,文本颜色将被黑色覆盖(我猜这是默认颜色),或者如果我在更改背景颜色之后更改文本颜色,背景颜色将被白色覆盖(我猜是默认颜色)。
我知道文本框值与PostBack请求发布,但我认为ViewState应该存储文本框的控制信息。如果我显式地为主文本框启用ViewState,它仍然不会。
我可以解决这个问题。但是,为什么会有这样的行为呢?
我已经检查了这个资源:http://www.c-sharpcorner.com/UploadFile/ee01e6/viewstate-for-textbox-in-Asp-Net/
当我使用单选按钮时,它工作。如果我使用文本框作为颜色选择器,那么它就不起作用了。
这是一个错误的文本框当使用TextMode设置为颜色??
下面是主文本框:
<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无关,它的颜色。FromName,如果你使用ColorTranslator。FromHtml它工作完美,所以我想从颜色返回的颜色。FromName确实无效。
真是个奇怪的bug。
EDIT:好的,所以我检查了结果颜色,这并不是一个bug, FromName必须只用于命名颜色"红色","蓝色"等,如果你这样使用它,它会创建一个具有这些属性的颜色(值是例子)"{Name=#6bea55, ARGB=(0,0,0,0)}",正如你所看到的名称有一个前置#和RGB值都是零,因为它不能解析它,但如果你使用翻译器,然后它创建了一个颜色像这样"{Name=ff6bea55, ARGB=(255,107,234,85)}",所以发生的事情是,HTML渲染器正在使用Name属性来填充style属性的值,但ViewState正在存储ARGB值,当你做回发时,它恢复那些ARGB值,因此颜色丢失。
您需要捕获隐藏字段或视图状态中的颜色,并在回发后检查它