0

現在、Obout Calendar コントロールを使用して日付範囲検索機能を実装しようとしています。アイデアは、ユーザーが Obout カレンダーから日付を選択して、その横にある asp:TextBox を埋めることができるということです。フォームには他にもフィールドがありますが、壊れているのはこれです。また、フォームの下部に asp:Button があり、フォーム内のすべてのフィールドをクリアする機能があります。これは、コードビハインドで次のように行います。

protected void btnClearFields_Click(object sender, EventArgs e)
{
    txtFrom.Text = "";
    txtTo.Text = "";
}

そして、ここに関連するフロントエンドコードがあります:

<table>
    <tr>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <td>
                    <asp:Label ID="lblFrom" runat="server" Text="From:"></asp:Label>
                    <br />
                </td>
                <td>
                    <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox>
                </td>
                <td>
                    <obout:Calendar runat="server" ID="CalendarFrom" TextBoxId="txtFrom" StyleFolder="Calendar/styles/orbitz" ScriptPath="Calendar/calendarscript" DatePickerButtonText <IMG src='Images/calendar.gif' align=absMiddle border=0>" ShowYearSelector="true" DateMin="1/1/1900" AllowDeselect="false" DatePickerMode="true" />
                </td>
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdatePanel ID="UpdatePanel2" runat="server">
            <ContentTemplate>
                <td>
                    <asp:Label ID="lblTo" runat="server" Text="To:"></asp:Label>
                </td>
                <td>
                    <asp:TextBox ID="txtTo" runat="server"></asp:TextBox>
                </td>
                <td>
                    <obout:Calendar runat="server" ID="CalendarTo" TextBoxId="txtTo" StyleFolder="Calendar/styles/orbitz" ScriptPath="Calendar/calendarscript" DatePickerButtonText <IMG src='Images/calendar.gif' align=absMiddle border=0>" ShowYearSelector="true" DateMin="1/1/1900" AllowDeselect="false" DatePickerMode="true" />
                </td>
            </ContentTemplate>
        </asp:UpdatePanel>
    </tr>
</table>

今、私が抱えている問題は、最初にページをロードしたとき、すべてがうまくいっていることです。カレンダーから日付を選択すると、期待どおりにテキスト ボックスに入力されます。ただし、[フィールドのクリア] ボタンをクリックすると、部分的なポストバックが発生し、問題が発生します。(フィールドがクリアされた後) カレンダー アイコンをもう一度クリックすると、ポップアップする日付セレクターの書式設定がめちゃくちゃになります。カレンダー部分はただの赤い四角で、日付を選択することはできません。年選択バーは画面全体に広がり、年を変更してもカレンダーには何も影響しません。

私の研究では同様の問題を見つけることができなかったので、何を試したらよいかわかりません。テーブル全体で UpdatePanel を 1 つだけ使用しようとしましたが、同じ問題が発生します。また、UpdatePanels にカレンダーを含めないようにしました。これにより、カレンダーが「壊れる」ことはありませんが、Web ページに 2 つの新しい TextBox フィールドが配置され (カレンダーから新しい値が受け入れられます)、古いものはクリアされません。また、ボタンとカレンダーを含むテーブルの両方を同じ UpdatePanel に配置しようとしましたが、そこにも同じ赤いボックスが表示されます。

4

1 に答える 1

0

この回答で非常によく似た問題が見つかりました。Obout カレンダーを含めなかった場合、UpdatePanel のコンテンツが複製されるという問題が発生しました。次のように、UpdatePanels を asp:TextBox のみを囲むように移動することで、この問題を修正しました。

<td>
    <asp:Label ID="lblFrom" runat="server" Text="From:"></asp:Label>
    <br />
</td>
<td>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:TextBox ID="txtFrom" runat="server"></asp:TextBox>
        </ContentTemplate>
    </asp:UpdatePanel>
</td>
<td>
    <obout:Calendar runat="server" ID="CalendarFrom" TextBoxId="txtFrom" StyleFolder="Calendar/styles/orbitz" ScriptPath="Calendar/calendarscript" DatePickerButtonText <IMG src='Images/calendar.gif' align=absMiddle border=0>" ShowYearSelector="true" DateMin="1/1/1900" AllowDeselect="false" DatePickerMode="true" />
</td>

これにより、Obout カレンダーを更新する必要がなくなり、元の問題が解決されました。

于 2012-09-12T21:31:01.950 に答える