【问题标题】:ASP.NET: How do I navigate to a page after clicking a checkbox?ASP.NET:单击复选框后如何导航到页面?
【发布时间】:2012-09-25 13:52:54
【问题描述】:

当值更改时,我有一些checkboxesdropdownlist 我想在传递新值的同时刷新页面。我尝试使用autopostback;但是,该值已经在之前的 url 中,所以当回发发生时,该值永远不会改变。

例子:

CurrentPage: page.aspx?tab=Home&checkbox=True

然后我取消选中该复选框,因此我希望它转到以下页面...

IntendedPage: page.aspx?tab=Home&checkbox=False

但是我的自动回发给了我这个页面......

DestinationPage: page.aspx?tab=Home&checkbox=True

因为,我通过页面上的一个函数来处理 url 的构建。也许我在这一点上做错了什么。如果是这样,我很乐意纠正我当前的设置。我想我需要知道的是如何在 checkbox.checkchanged 事件上加载自定义 URL。我希望这是有道理的,如果不让我知道,我会尝试澄清它。谢谢!

【问题讨论】:

    标签: asp.net vb.net checkbox autopostback


    【解决方案1】:

    您可以尝试这样的事情(我没有测试过,这只是一个想法)。

     protected void CheckBox1_CheckedChanged ( object sender, EventArgs e )
        {
            string url = "page.aspx?tab=Home&checkbox="+ CheckBox1.Checked.ToString();
            Response.Redirect ( url );
        }
    

    然后在页面上:

    <asp:CheckBox ID="CheckBox1" runat="server" 
    oncheckedchanged="CheckBox1_CheckedChanged" />
    

    VB.NET 转换

    Protected Sub CheckBox1_CheckedChanged(sender As Object, e As System.EventArgs) Handles CheckBox1.CheckedChanged
           Dim url = "page.aspx?tab=Home&checkbox=" & CheckBox1.Checked.ToString()
           Response.Redirect(url)
    End Sub
    

    【讨论】:

    • 我已经用我在上面编辑中提供的 VB.NET 代码尝试了你的方法。一切都正确编译,但 onCheckedChanged 似乎没有发生......有什么想法吗?
    【解决方案2】:

    这很容易通过 javascript 实现。首先将onclick="checkCheckBox(this);" 添加到您的复选框。

    <script language = "javascript" type="text/javascript"> 
    function checkCheckBox(checkbox) {
            if (checkbox.checked) {
                window.location.href = '../page.aspx?tab=Home&checkbox=True';
            }
            else {
                window.location.href = '../page.aspx?tab=Home&checkbox=False';
            }
        }
    </script>
    

    这应该很容易做到。

    【讨论】:

      【解决方案3】:

      此行为是由viewstate 引起的。 checkbox 使用它来持久化其属性,尤其是 checked 属性。

      实际上,控件和查询字符串之间没有开箱即用的链接。

      根据您的需要,您将有两种选择:

      • Checked 事件中,构建预期的url,并redirect 用户访问此页面。缺点是您“松散”了视图状态,从而“松散”了控件的状态。
      • 不使用回发,而是使用客户端脚本(jQuery 是您的朋友)来隐藏/显示页面的某些部分。如果 url 很重要,请在 url 中使用 #,因为它确实允许停留在同一页面上。

      【讨论】:

        猜你喜欢
        • 2021-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多