Почему мой CheckBox.Checked Property будет сброшен? - PullRequest
2 голосов
/ 15 марта 2012

Использование: .NET 3.5SP1, VS2008

Я редактировал другой скрипт asp.net, он выполнял извлечение данных на Page_Load, пока страница не отправляла обратно.

IЯ мог видеть, что данные были заполнены в DropDownList должным образом даже после того, как я обновил, переместился, выполнил постбэк на странице.

Я добавил в скрипт еще несколько DropDownList и несколько CheckBox, только добавленный DropDownList был заполнен правильно.Но не CheckBox.

Так что я делаю тест в новом проекте, который похож на его структуру скрипта:

ASPX:

<form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
            <asp:ListItem>Item1</asp:ListItem>
            <asp:ListItem>Item2</asp:ListItem>
        </asp:DropDownList>
        <% 
            if (DropDownList1.SelectedValue == "Item2")
            {                
        %>
        <asp:CheckBox ID="CheckBox1" runat="server" Text="CheckBox 1" />
        <asp:TextBox ID="TextBox1" runat="server" Text="" />
        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true">
            <asp:ListItem>Item1</asp:ListItem>
            <asp:ListItem>Item2</asp:ListItem>
        </asp:DropDownList>
        <%
            }
        %>
    </div>
    </form>

Code-Behind:

 public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.CheckBox1.Checked = true;
                this.CheckBox1.Text = "Hello CheckBox";
                this.TextBox1.Text = "Hello TextBox";
                this.DropDownList2.SelectedValue = "Item2";
            }
        }
    }

Итак, когда вы видите код, при первой загрузке страницы текст CheckBox1 изменится, Checked будет истинным, так же как и другие TextBox и DropDownList2

После того, как я выбрал элемент DropDownList1 для Item2, когда CheckBox1, TextBox1, DropDownList2 ничего не было установлено, кроме CheckBox1.Text.

Почемуэто случилось?

РЕДАКТИРОВАТЬ:

Я пытался поместить их в Panel, таким образом это работает.Но проблема в том, что программа, которую я редактирую, использует формат выше ... Поэтому я не могу изменить их все на Panel.

<form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
            <asp:ListItem>Item1</asp:ListItem>
            <asp:ListItem>Item2</asp:ListItem>
        </asp:DropDownList>
        <% 
            if (DropDownList1.SelectedValue == "Item2")
            {
                this.MyPanel.Visible = true;
            }
            else
            {
                this.MyPanel.Visible = false;
            }
        %>
        <asp:Panel ID="MyPanel" runat="server" Visible="false" >
            <asp:CheckBox ID="CheckBox1" runat="server" Text="CheckBox 1" />
            <asp:TextBox ID="TextBox1" runat="server" Text="" />
            <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true">
                <asp:ListItem>Item1</asp:ListItem>
                <asp:ListItem>Item2</asp:ListItem>
            </asp:DropDownList>
        </asp:Panel>

    </div>
    </form>

1 Ответ

0 голосов
/ 15 марта 2012

Попробуйте установить EnableViewState и ViewStateMode, возможно, некоторые родительские элементы управления отключили его, поэтому применено значение наследования по умолчанию.

MSDN :

Значением по умолчанию свойства ViewStateMode для элемента управления веб-сервера на странице является Наследовать .В результате, если вы не установите это свойство ни на странице, ни на уровне элемента управления, значение свойства EnableViewState определяет поведение состояния просмотра.

<asp:CheckBox ID="CheckBox1" runat="server" Text="CheckBox 1" 
              EnableViewState="true"
              ViewStateMode="Enabled" />
...