我在类似于this one的ASP.NET页面中有一个“ColorPicker”功能,除了右边的阴影是动态填充的,具体取决于是否已经使用了阴影。
我有一个TextBox,显示所选颜色/阴影的十六进制值(#RRGGBB):
<asp:TextBox runat="server" ID="TbxColorhex" Text="#FF0000" Enabled="false" />
呈现为:
<input name="TbxColorhex" type="text" value="#FF0000" id="TbxColorhex"></input>
当单击一个阴影(表格单元格)时,我使用JavaScript来更改TextBox中的文本(十六进制值)。
function selectShade(shadehex) {
if (shadehex) {
document.getElementById('divpreview').style.background = shadehex;
document.getElementById('<%= TbxColorhex.ClientID %>').value = shadehex;
}
}
我有一个确认所选颜色的按钮:
<asp:Button ID="BtnSelectColor" runat="server" Text="Select Color" OnClick="BtnSelectColor_Click" style="margin: 0 auto" />
单击时触发此方法(在后面的代码上):
protected void BtnSelectColor_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(TbxColorhex.Text))
{
Response.Redirect(Page.ResolveClientUrl("~/Something/AddProject.aspx?projcolor=" + TbxColorhex.Text));
}
}
问题:
当单击一个阴影时,JavaScript会相应地更改TextBox中的文本(您可以看到TextBox中的文本发生了变化。但是,如果我使用调试器,我会注意到{{1}的值没有变化value
标记中的属性。因此,当我单击按钮时,它不会获得TextBox显示的文本。
答案 0 :(得分:1)
问题出在Enabled="false"
。禁用输入的值不包含在浏览器提交给服务器的POST数据中。您可以尝试将TextBox
设为只读。
如果您必须将其禁用,请在表单中添加HiddenField
控件,并在javascript中设置其值与设置TextBox
的方式相同。然后,在服务器端代码中将值从HiddenField
传输到TextBox
。
答案 1 :(得分:0)
不要担心输入标记的value属性。担心通过POST发送到服务器的值。
如果BtnSelectColor_中的值不正确,可能是因为你在页面加载的某处设置了值并覆盖了回发值。