当我更改其背景色时,文本框的前景色会重置,反之亦然(使用 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 值,因此颜色丢失。
我有一个多行文本模式的主文本框,还有两个彩色文本模式的文本框,一个用于更改文本颜色,另一个用于更改主文本框的背景颜色。
问题是如果我在更改文本颜色后更改背景颜色,文本颜色将被黑色覆盖(我想这是默认颜色),或者如果我在更改文本颜色后更改文本颜色背景颜色,背景颜色将被白色覆盖(我猜是默认颜色)。
我知道文本框值是通过 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 值,因此颜色丢失。