Сохранить, если флажок установлен через обратную передачу - PullRequest
6 голосов
/ 17 октября 2011

У меня есть флажок, который по умолчанию установлен в «ложь» в aspx.Затем есть функция, которая определяет, является ли она истинной или ложной, проблема в том, что когда на странице есть текстовое поле, и в этом текстовом поле есть событие TextChange, когда я набираю что-то в текстовом поле, а затем перехожу к флажку, которыйв это время виден первый раз, когда я щелкаю всю страницу постбэков и сбрасывает флажок на непроверенный .. затем мне нужно щелкнуть его снова, а затем он залипает .. что я могу сделать, чтобы он приклеился при первом щелчке?

Могу ли я использовать для этого какой-нибудь javascript или как вы думаете, какие у меня есть варианты?

 protected void myTextbox_TextChanged(object sender, EventArgs e)
    {
        ShowCheckBox(true);
    }

  private void ShowCheckBox(bool ckVal)
   {
      myCheckBox.Visible = ckVal;
   }

Ответы [ 5 ]

6 голосов
/ 23 октября 2011

почему бы не добавить текстовое поле внутри панели обновления примерно так:

<asp:UpdatePanel runat="server" ID="test">
    <ContentTemplate>
        <asp:TextBox ID="TEXTBOX" runat="server" Visible="true" AutoPostBack="true"
            OnTextChanged="checkUser" >Page Name</asp:TextBox>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="TEXTBOX" EventName="TextChanged" />
    </Triggers>
</asp:UpdatePanel>
5 голосов
/ 22 октября 2011

Мое лучшее предположение заключается в том, что инициализация вашего флажка (который устанавливает Checked в false) запускается при каждой обратной передаче.Например, измените этот

protected void Page_Load(object sender, EventArgs e)
{
    myCheckBox.Checked = false;
}

на этот

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        myCheckBox.Checked = false;
}

Однако, прежде чем мы сможем оказать вам эффективную помощь, нам потребуется еще немного кода.Частично проблема может заключаться в том, что ViewState не сохраняется, когда элемент управления не отображается.Если все, что вы хотите сделать, это показать / скрыть его, используйте javascript, как предлагали другие.

Вот пример с jQuery:

$(document).ready(function (){
  $("#myTextBox").change(function() {
    $("#myCheckBox").show();
  });
});
4 голосов
/ 22 октября 2011

Если бы я был вами, я бы написал кое-что на стороне клиента, чтобы показать флажок или скрыть его, написание кода отстой на стороне сервера не очень хорошо и требует дополнительного туда и обратно также вы можете использовать панель обновления для этого

3 голосов
/ 22 октября 2011

Флажок, если .Visible = false не отображается клиенту. Поэтому, когда происходит обратная передача, значение по умолчанию «ложь» устанавливается равным.

Вы можете визуализировать элемент управления все время и переключать видимость через CSS, поэтому флажок всегда является частью дерева элемента управления и его ViewState сохраняется.

style="display:none" и style="display:inline"

0 голосов
/ 21 октября 2011

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

Если этого не произойдет, опубликуйте свой код или полный пример кода, воспроизводящего проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...