C# ASP.Net中的Http请求问题
我使用的是C#+VS2008+.NET3.5+ASP.Net+IIS7.0+ADO.Net+SQLServer2008。我想开发一个ASP.Net aspx页面,该页面具有以下功能 1它可以接受3个Url参数param1、param2和param3,请求如下所示 2当页面响应客户端浏览器时,我想在结果html页面附近显示一个文本输入和一个提交按钮,文本输入的值与param1相同,在本示例中,abc将显示在文本框中,在浏览器地址栏中,我想保留原长url 3当用户更改文本输入中的值,并单击提交按钮时,我想再次将此请求发送到foo.aspx,并将param1值更改为用户在文本输入中输入的值,同时保持parame2和param3的值与上次请求的响应相同。例如,当用户请求并显示页面时,当用户将文本输入从abc更改为google时,新请求将被删除C# ASP.Net中的Http请求问题,c#,asp.net,.net,visual-studio-2008,iis-7,C#,Asp.net,.net,Visual Studio 2008,Iis 7,我使用的是C#+VS2008+.NET3.5+ASP.Net+IIS7.0+ADO.Net+SQLServer2008。我想开发一个ASP.Net aspx页面,该页面具有以下功能 1它可以接受3个Url参数param1、param2和param3,请求如下所示 2当页面响应客户端浏览器时,我想在结果html页面附近显示一个文本输入和一个提交按钮,文本输入的值与param1相同,在本示例中,abc将显示在文本框中,在浏览器地址栏中,我想保留原长url 3当用户更改文本输入中的值,并单击提交按钮
有参考样品吗?我的问题是我不知道如何在一个aspx页面中实现这么多功能。如果您希望浏览器地址栏显示更新的URL,您可以允许按钮单击发回服务器,然后处理文本框的TextChanged事件 在TextChanged事件处理程序中,使用已更改的querystring参数构建新URL,并使用Response.Redirect将浏览器重定向到新URL 这里有一个简单的例子 给定一个带有文本框和按钮的ASPX页面,诸如此类
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._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>
<script type="text/javascript">
function requery() {
var query = location.search.substring(1);
var pairs = query.split("&");
var param1Value = document.getElementById("txtParam1").value;
url = "/Default.aspx?param1=" + param1Value;
for (var i = 0; i < pairs.length; ++i) {
var pair = pairs[i];
if ((pair.indexOf("param1") != 0) && (pair.length > 0)) {
url += "&" + pair;
}
}
location.href = url;
}
</script>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtParam1" runat="server" OnTextChanged="txtParam1_TextChanged"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Submit" />
<input type="button" value="Client Action" onclick="requery()" />
</div>
</form>
</body>
</html>
您是否尝试过
…
?当然,命名您的输入param1
。如何使用该解决方案?你能给我看一个完整而简单的样本吗?@George2,保留原来的两个参数是什么意思。我提供的示例应该在URL上保留param2和param3。对于两个页面加载事件,这是意料之中的。第一个是对按钮回发事件的响应,第二个是对浏览器重定向到新URL的响应(这是一个GET-so IsPostBack==false),这是具有新参数的同一目标页。@George2,我相信我在第一条评论中已经回答了这个问题。我引用“对于两个页面加载事件,这是预期的。第一个是响应按钮的回发事件,第二个是响应浏览器重定向到新URL(这是一个GET so IsPostBack==false),这是具有新参数的同一目标页面”@George2,另一种方法是在客户端使用javascript在按钮点击上构建新的URL(这将在客户端事件而不是服务器端事件上处理),然后将Window.Location更改为新的URL。在这里查看有关Window的更多信息。位置:@George2,我会找时间整理一个样本。但是您不会对按钮使用服务器端控件,因为您想处理这个客户端。@George2,我用一个快速脏的javascript函数和一个调用该函数的客户端按钮更新了ASPX代码。现在您有了一个简单的示例,说明如何在客户端和服务器端执行此操作。JS可能会得到改进,这并不是我经常使用的东西,所以我只使用了基本功能,但它应该可以工作。
using System;
using System.Text;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtParam1.Text = Request.QueryString["param1"];
}
}
protected void txtParam1_TextChanged(object sender, EventArgs e)
{
// Build the new URL with the changed value of TextBox1
StringBuilder url = new StringBuilder();
url.AppendFormat("{0}?param1={1}",
Request.Path, txtParam1.Text);
// Append all the querystring values that where not param1 to the
// new URL
foreach (string key in Request.QueryString.AllKeys)
{
if (string.Compare(key, "param1", true) != 0)
{
url.AppendFormat("&{0}={1}", key, Request.QueryString[key]);
}
}
// Redirect the browser to request the new URL
Response.Redirect(url.ToString());
}
}
}