ASP.NET AJAX ColorPickerExtender на стороне клиента работает нормально, код позади цвета пуст - PullRequest
1 голос
/ 03 января 2012

У меня необычная проблема с инструментарием AJAX ColorPickerExtender. Код Javascript работает нормально, он меняет цвет фона расширенного текстового поля на выбранный цвет, а текст также на выбранный цветовой код, но когда я пытаюсь получить текст этого расширенного текстового поля из кода, он возвращается, как если бы он возвращал исходное значение текста, как если бы JavaScript не изменил его , Так как этот же код работает на моем другом приложении, я подозреваю, что проблема в том, что я помещаю ColorPickerExtender в UpdatePanel, а затем в пользовательский элемент управления. Вот код:

Код управления пользователем, где ColorPickerExtender:

    <script language="javascript" type="text/javascript">
        function colorChanged(sender) {
            sender.get_element().style.backgroundColor = "#" + sender.get_selectedColor();
            sender.get_element().style.color = "#" + sender.get_selectedColor();
            sender.get_element().value = "0x" + sender.get_selectedColor();     
        }          
    </script>
...
...
<asp:TextBox ID="ColorTextBox" runat="server" ReadOnly="True" BackColor="Black" Text="" >0x000000</asp:TextBox>
                <asp:ColorPickerExtender ID="ColorTextBox_ColorPickerExtender" runat="server" Enabled="True" TargetControlID="ColorTextBox" OnClientColorSelectionChanged="colorChanged" PopupButtonID="PickColorButton">
                </asp:ColorPickerExtender>
                <asp:Button ID="PickColorButton" runat="server" Text="Pick Color" />

Код страницы (верхний пользовательский элемент управления оборачивается в Panel, а затем в панель обновления):

            <asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="PostNewThoughtButton1" PopupControlID="pnlThoghtPopup" BackgroundCssClass="modalBackground" DropShadow="false" />
...
    <asp:Panel ID="pnlThoghtPopup" runat="server"  Style="display:none;">
    <asp:UpdatePanel ID="pnlUpdate" runat="server">
    <ContentTemplate>
<My:NewThoughtPopup ID="NewThoughtPopup1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>

Итак, когда я пытаюсь вызвать это в codebehind:

string color = ColorTextBox.Text;

color всегда возвращает начальное значение: 0x000000, хотя со стороны клиента все выглядит нормально, текст ColorTextBox обновляется, и его цвет меняется, на стороне сервера ничего не происходит, нужно ли вызывать функцию обратной передачи перед попыткой получить цвет строки? Примечание: тот же код работает нормально без панели обновления и когда он не используется на пользовательском элементе управления

1 Ответ

3 голосов
/ 13 января 2012

У меня была похожая проблема - это потому что TextBox установлен на ReadOnly="True"
вы можете использовать HiddenField дополнительно к вашему TextBox

<asp:HiddenField ID="HiddenFieldColorText" runat=server />

и в javascript просто установите значение HiddenField с помощью

document.getElementById('<%=HiddenFieldColorText.ClientID %>').value = yourColorString;    


поскольку вы устанавливаете значение HiddenField в Javascript и хотите, чтобы это значение снова было в PostPack, вам необходимо снова установить его на Page_Load с

HiddenFieldColorText.Value = Request.Params[HiddenFieldColorText.UniqueID];
...