Http-запрос проблема в ASP.Net - PullRequest
0 голосов
/ 24 июля 2010

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

1 Может принимать 3 параметра Url param1, param2 и param3, и запрос выглядит следующим образом:

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

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

3 Когда пользователь меняет значение при вводе текста и нажимает кнопку «Отправить», я хочу отправить этот запрос еще раз на foo.aspx, и меняя значение param1 на значение, введенное пользователем при вводе текста, время, оставьте значения параметров 2 и 3 такими же, как в ответе на последний запрос. Например, когда пользователь запрашивает 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 Ответ

2 голосов
/ 24 июля 2010

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

В обработчике событий TextChanged вы создаете новый 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>

Ваш код для обработки события 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());
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...