2009-05-31 7 views
4

J'ai une tâche simple - pour changer le lien de page sur le changement d'état case à cocher - mais je suis nouveau à ASP.NET et ai quelques problèmes.ASP.NET état CheckBox et PostBack

je peux faire la même chose en utilisant HtmlControl et 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> 

mais je veux cacher des utilisateurs. Alors je fais:

<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; 
    } 
} 

Mais il semble que l'enregistrement de changement d'état de la charge Déclenche l'événement à nouveau et la case devient toujours vérifié!

Ans une autre question - existe-t-il un autre moyen de rediriger vers la même page sans donner son nom de fichier? Je veux dire comme en JavaScript - seulement donner des variables nécessaires?

Répondre

2

Vous pouvez appeler votre côté client « checkbox_onChanged » de la case à cocher ASP.NET, il suffit d'ajouter le « onchange » du Page_Load, par exemple:

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

Voir le texte source et vous verrez ce qui se passe dans le HTML ..

+0

Merci pour votre réponse! Mais je ne veux pas faire ça du côté client. Pourriez-vous m'indiquer comment faire la tâche uniquement sur le serveur? Mon paradigme logiciel nécessite une quantité minimale d'actions côté client. – abatishchev

+0

pourquoi envoyez-vous l'info dans la chaîne de requête? vous pouvez simplement accéder à la propriété check.Checked. note ASP.NET viewstate conservera l'état de votre case à cocher entre les publications sans que vous ayez à tester Request ["show"]. – russau

+0

Merci beaucoup! – abatishchev