当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>
答案 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)
如果您的下拉列表包含三个项目,例如:
为下拉列表提供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