我正在尝试学习asp.net(vb.net),我遇到了一些麻烦。我想根据查询字符串更改页面内容。
在经典的asp中我会这样做:
<% If request.querystring("page") = 1 THEN %>
-entire page-
<% Else %>
-different page-
<% End If %>
我能进入的最接近的网络是
Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)
If Request.QueryString("page") = 1 Then
lblMessage1.Text = "message"
Else
lblMessage1.Text = "message2"
End If
End Sub
这对小事来说似乎只是好事。更改整个页面的最佳方法是什么?
答案 0 :(得分:6)
您可以执行以下操作(简单重定向):
If Request.QueryString("page") = 1 Then
Response.Redirect("MyPage1.aspx")
Else
Response.Redirect("MyPage2.aspx")
End If
你也可以这样做(阅读更多here):
If Request.QueryString("page") = 1 Then
Server.Transfer("MyPage1.aspx")
Else
Server.Transfer("MyPage2.aspx")
End If
最后还有一个选项(在页面上显示/隐藏不同的面板):
If Request.QueryString("page") = 1 Then
MyPanel1.Visible = true
MyPanel2.Visible = false
Else
MyPanel1.Visible = false
MyPanel2.Visible = true
End If
答案 1 :(得分:4)
我建议使用MultiView control。
简而言之,您将创建两个多视图“视图”,每个视图都带有您想要显示的html。然后你可以查看querystring参数并相应地切换多视图的活动视图。
与其他人建议的一样,这对Response.Redirect()有很多好处。首先,这将始终生成至少两个浏览器请求。此外,Response.Redirect()会在幕后抛出一个ThreadAborted异常,这可能会使诊断应用程序的人感到困惑。
MultiView控件示例:
ASPX:
<form id="form1" runat="server">
<div>
<asp:MultiView ID="MultiView1" runat="server">
<asp:View runat="server">
Hi, this is Page 1
</asp:View>
<asp:View runat="server">
Hi, this is Page 2
</asp:View>
</asp:MultiView>
</div>
</form>
代码:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Request.QueryString("page") = "1" Then
MultiView1.ActiveViewIndex = 0
Else
MultiView1.ActiveViewIndex = 1
End If
End Sub
答案 2 :(得分:1)
你真的有几个选择,你可以:
根据输入将Response.Redirect(url)转移到其他页面。
您可以将ASP:Panel的“visible”属性设置为false,并根据输入切换该值。
答案 3 :(得分:1)
为什么不使用不同的文件呢?重定向到不同的页面。 这样可以避免在任何地方都有if语句。
或
将您的数据放在面板中,只隐藏一个或另一个panel1.visible =(true / false)。如果你必须在同一个aspx页面中拥有它,这是最好的事情。
答案 4 :(得分:0)
为了将来参考,您仍然可以使用传统的ASP方式来控制内容。这是我刚才写的ASPX页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
if (3 == 9)
{%>
<span>Hello</span>
<%
}
else
{
%> <span>What?</span > <%
}
%>
</div>
</form>
</body>
</html>
当页面呈现时,它会显示“什么?”在页面上。
然而,我会说这是不好的做法和糟糕的设计!使用womp的多视图建议或页面重定向。
答案 5 :(得分:0)
我更喜欢使用DataBinding在ASPX页面上执行此操作:
<asp:PlaceHolder runat="server" ID="Messages">
<asp:Label runat="server" Visible=<%# Request.QueryString("page") = 1 %> Text="Message 1" />
<asp:Label runat="server" Visible=<%# Request.QueryString("page") <> 1 %> Text="Message 2"/>
</asp:PlaceHolder>
然后在服务器端:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Messages.DataBind()
End Sub