2009-05-31 7 views
4

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

я могу сделать то же самое, используя 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; 
    } 
} 

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

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

ответ

2

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

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

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

+0

Спасибо за ответ! Но я не хочу делать это на стороне клиента. Не могли бы вы рассказать мне, как выполнять задачу только на стороне сервера? Моя парадигма программного обеспечения требует минимального количества действий на стороне клиента. – abatishchev

+0

Почему вы отправляете информацию вокруг в строке запроса? вы можете просто открыть свойство check.Checked. обратите внимание, что ASP.NET viewstate будет поддерживать состояние вашего флажка между postbacks без необходимости тестирования Request ["show"]. – russau

+0

Спасибо вам большое! – abatishchev