asp.net下拉列表回发到锚点

时间:2010-05-26 16:17:37

标签: asp.net postback

当myDropDownList_SelectedIndexChanged()事件触发时,如何在页面上转到锚标记? 我正在使用常规的ASP.NET Forms。

更新:以下内容对ASP.NET按钮有效。当我从下拉列表中选择一个选项时,我想实现相同的功能(转到#someAnchor)。

<asp:Button ID="btnSubmit" runat="server" Text="Do IT"  Width="186px" PostBackUrl="#myAnchor" CausesValidation="false" />

更新:我将尝试进一步解释我最初没有详细介绍的细节。 这是一个长页面,在页面中间有一个下拉列表。下拉列表下方是一个标签,该标签将根据从下拉列表中选择的项目进行更改。标签的更新将在回发期间发生。此时页面需要继续关注下拉列表。我尝试使用AJAX来实现这一点,但其他实现细节阻止了它的工作。在回发之后转到锚标记的能力将是一个简单的解决方案。这是我想要完成的简化版本。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    Protected Sub myDropDown_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        myLabel.Text = myDropDown.SelectedValue
        'When this finishes, go to #myAnchor
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Imagine many lines of text here.
        <a name="myAnchor"></a>
        <asp:DropDownList ID="myDropDown" runat="server" OnSelectedIndexChanged="myDropDown_SelectedIndexChanged" asdf="asdf" PostBackUrl="#myAnchor"></asp:DropDownList>
        <asp:Label ID="myLabel" runat="server"></asp:Label>
    </div>
    </form>
</body>
</html>

7 个答案:

答案 0 :(得分:3)

这可以解决问题

    <asp:DropDownList ID="DropDownList1" runat="server" 
       onchange="document.location= this.value">
       <asp:ListItem Text="Anchor" Value="#anchor"></asp:ListItem>
       <asp:ListItem Text="Anchor2" Value="#anchor2"></asp:ListItem>
    </asp:DropDownList>

你提到myDropDownList_SelectedIndexChanged()(服务器代码),但你必须在客户端进行,除非你有充分的理由去服务器

答案 1 :(得分:1)

将此添加到您的页面加载中,您将会很高兴。

Page.MaintainScrollPositionOnPostBack = true;

答案 2 :(得分:0)

我会使用JavaScript - 在代码隐藏中注册脚本,或者使用只在SelectedIndexChanged事件之后可见的asp:Literal。修改location.href以附加你的锚。

答案 3 :(得分:0)

执行此操作的一种方法是在ASP.NET中使用forms.Controls bla bla bla属性。 但我建议您使用asp.net超链接控件或链接按钮,这样您就可以直接使用其ID访问它。

感谢, MNK。

答案 4 :(得分:0)

如果您的下拉列表包含三个项目,例如:

  • 第1页
  • 第2页
  • Page3

为下拉列表提供AutoPostBack="true"的属性,然后在下拉列表OnSelectedIndexChanged方法中写下以下内容:

if (DDl.SelectedIndex == 1) {
    Response.Redirect("~/page1");
}
else if (DDl.SelectedIndex == 2) {
    Response.Redirect("~/page2");
}

答案 5 :(得分:0)

这个要求有简单的javascript解决方案。但问题是设计有缺陷。一旦你移动到屏幕的新区域,你无法访问导航选择列表而不向后滚动。无论如何以下工作

   <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function Goto(x) {
        window.location =  "#"+x.value;
        }

    </script>
</head>
<body>
    <select id="Select1"  name="D1"  onchange="Goto(this);">
        <option value="Loc1" >go to 1 </option>
        <option value="Loc2">go to 2 </option>
        <option value="Loc3">go to 3 </option>
        <option value="Loc4">go to 4 </option>
    </select><form id="form1" runat="server">
    </form>


 <strong>  <a href="#" id="Loc1" >Location 1</a></strong>

 blah
  <strong><a href="#" id="Loc2">Location 2</a></strong>

    <strong><a href="#" id="Loc3">Location 3</a></strong>

    <strong><a href="#" id="Loc4">Location 4</a></strong>
</body>
</html>

答案 6 :(得分:0)

以下是我为实现预期结果而实施的内容。

Protected Sub myDropDown_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myDropDown.SelectedIndexChanged

    Response.Redirect("Default.aspx?myDropDown=" & myDropDown.SelectedItem.Text.ToString.Trim & "#myAnchor")

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim myDropDownValue As String = Request.QueryString("myDropDown")
        If myDropDownValue <> "" Then

            myDropDown.Items.FindByText(myDropDownValue).Selected = True
                Label1.Text = GetTextBasedOnDropDownSelection(myDropDownValue)

        End If
    End If
End Sub