我有一个带有多行文本模式的主文本框,另外两个带有颜色文本模式的文本框,一个用于更改文本颜色,另一个用于更改主文本框的背景颜色。
问题是如果我在更改文本颜色后更改背景颜色,文本颜色将被黑色覆盖(我猜这是默认颜色),或者如果我在更改背景颜色后更改文本颜色,背景颜色将被白色覆盖(我猜的默认颜色)。
我知道文本框值是使用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);
}
答案 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)
您需要捕获隐藏字段中的颜色或查看状态并在回发后进行检查。