2010-07-24 4 views
0

Я использую C# + VS2008 + .Net 3.5 + ASP.Net + IIS 7.0 + ADO.Net + SQL Server 2008. Я хочу создать страницу ASP.Net aspx, которая имеет следующие функция,Проблема запроса Http в ASP.Net

1 это может принять 3 параметры URL param1, param2 и Param3, и запрос выглядит так,

http://example.org/foo.aspx?parame1=abc&param2=def&param3=ghi

2 Когда страница responsed в браузере клиента, я хочу, чтобы отобразить текстовый ввод и кнопка отправки рядом с результатами на странице html, а значение ввода текста совпадает с параметром param1, в этом примере abc будет отображаться в текстовом поле, в брови er адресная строка, я хочу сохранить оригинальный длинный URL-адрес http://example.org/foo.aspx?parame1=abc&param2=def&param3=ghi;

3 Когда пользователь меняет значение в текстовом вводе и нажимает кнопку «Отправить», я хочу отправить этот запрос еще раз на foo.aspx и изменить значение param1 на значение, введенное пользователем при вводе текста, и на в то же время сохраняйте значения параметров parame2 и param3 такими же, как ответ последнего запроса. Например, когда пользователь запрашивает http://example.org/foo.aspx?parame1=abc&param2=def&param3=ghi и отображается страница, когда пользователь меняет ввод текста с abc на google, новый запрос будет http://example.org/foo.aspx?parame1=google&param2=def&param3=ghi

Любые эталонные образцы? Мой вопрос: я не знаю, как реализовать так много функций на одной странице aspx.

+1

Вы пробовали '

...'? И, конечно, называя ваш вход 'param1'. –

+0

Как это решить? Не могли бы вы показать мне полный и простой пример? – George2

ответ

2

Если вы хотите, чтобы адресная строка браузера отображала обновленный URL-адрес, вы можете позволить кнопке щелкнуть по обратной ссылке на сервер, а затем обработать событие TextChanged в текстовом поле.

В обработчике событий TextChanged вы создаете новый URL-адрес с измененными аргументами запроса и используете Response.Redirect для перенаправления браузера на новый URL-адрес.

Вот краткий грязный пример.

Учитывая страницу ASPX с текстовым полем и кнопками, Somthing как этого

<%@ 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> 

Вашего код позади, чтобы обработать событие TextChanged текстового поля может сделать следующее.

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()); 
    } 
    } 
} 
+0

Другая проблема, которую я обнаружил, заключается в том, что при вводе строки в текстовый ввод и повторной отправке Page_Load будет вызываться дважды, один раз с IsPostBack true, а в другое время с IsPostBack false - это ожидаемое поведение (клиент отправляет два запроса на сервер?) ? Спасибо. – George2

+1

@ George2, что вы имеете в виду, сохраняя исходные два параметра. Приведенный мною образец должен содержать param2 и param3 по URL-адресу. Что касается двух событий Page_Load, это ожидается. Первое - в ответ на событие PostBack кнопки, а второе - в ответ на перенаправление браузера на новый URL (это GET так IsPostBack == false), который является той же целевой страницей с новыми параметрами. –

+0

Да, вы правы. Я не прав. :-( Не могли бы вы ответить на этот вопрос, пожалуйста? «Еще одна проблема, которую я нахожу, заключается в том, что при вводе строки в текстовый ввод и повторной отправке Page_Load будет вызываться дважды, один раз с IsPostBack true, а в другое время с IsPostBack false, это ожидаемое поведение (клиент отправляет два запроса на сервер?) «Спасибо». – George2

Смежные вопросы