Состояние ASP.NET CheckBox и PostBack - PullRequest
4 голосов
/ 31 мая 2009

У меня есть простая задача - изменить ссылку на страницу при изменении состояния флажка, но я новичок в ASP.NET и у меня возникли некоторые проблемы.

Я могу сделать то же самое, используя HtmlControl и JavaScript:

<script type="text/javascript" language="javascript">
  function checkbox_onChanged(checked) {
    if (checked) {
      document.location = '?type=request_in&show=all';
    }
    else {
      document.location = '?type=request_in&show=unapproved';
    }
  }

  function checkbox_onLoad(checkbox) {
    checkbox.checked = true;
  }
</script>

<form action="" method="get">
<input type="checkbox" name="checkbox"
  onload="checkbox_onLoad(this)"
  onchange="checkbox_onChanged(this.checked)" />Show all
</form>

но я хочу скрыть это от пользователей. Итак, я делаю:

<asp:CheckBox runat="server" ID="check" 
  OnCheckedChanged="check_CheckedChanged"
  AutoPostBack="True" Text="Show all" />

protected void check_CheckedChanged(object sender, EventArgs e)
{
  Response.Redirect(String.Format("{0}?type=request_in&show={1}", Request.Path, 
  checkViewRequestIn.Checked ? "all" : "unapproved"));
}

protected void Page_Load(object sender, EventArgs e)
{
  var show = Request["show"];
  if (!String.IsNullOrEmpty(show) && String.Equals(show, "all"))
  {
    checkViewRequestIn.Checked = true;
  }
}

Но, похоже, что изменение состояния проверки при загрузке снова вызывает событие, и флажок становится отмеченным всегда!

Еще один вопрос - есть ли другой способ перенаправить на ту же страницу, не указав имя файла? Я имею в виду, как в JavaScript - нужно указывать только переменные?

1 Ответ

2 голосов
/ 31 мая 2009

Вы можете вызвать свою клиентскую сторону 'checkbox_onChanged' из флажка ASP.NET, просто добавьте 'onchange' из Page_Load, например:

protected void Page_Load(object sender, EventArgs e)
{
   check.Attributes["onchange"] = "checkbox_onChanged(this.checked)";
}

Просмотрите исходный код, и вы увидите, что происходит в HTML ..

...