0

我有一些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。我希望这是有道理的,如果不让我知道,我会尝试澄清它。谢谢!

4

3 回答 3

2

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

 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
于 2012-09-25T14:05:00.897 回答
0

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

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

在您的情况下,您将有两种选择,具体取决于您的需要:

  • 在这种情况Checked下,构建预期的 url,并将redirect用户带到此页面。缺点是您“松开”了视图状态,因此也松开了控件的状态。
  • 而不是使用回发,使用客户端脚本(jQuery 是你的朋友)来隐藏/显示页面的某些部分。如果 url 很重要,请在 url 中使用 #,因为它确实允许停留在同一页面上。
于 2012-09-25T13:59:55.270 回答
0

这很容易通过 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>

这应该很容易做到。

于 2012-09-25T17:26:23.630 回答