Передача данных формы главной страницы в другую веб-форму - PullRequest
1 голос
/ 25 ноября 2008

У меня есть главная страница с одной формой. Это форма поиска, которая всегда должна быть видна. Когда нажата кнопка этой формы, я хочу, чтобы данные формы были отправлены на search.aspx. Проблема в том, что я не знаю как. Я не могу установить действие формы для search.aspx, потому что все остальные мои страницы, которые используют основную форму, перейдут в search.aspx Этого я не хочу.

Надеюсь, кто-нибудь может мне помочь:)

Thnx.

Ответы [ 6 ]

1 голос
/ 25 ноября 2008

Чтобы передать значения элемента управления "txtSearch", когда выполняется Server.Transfer, вы можете сделать много вещей, в том числе передать его через переменную строки запроса или настроить переменную сеанса, а затем проверить любой из них в событие Page_Load в Search.aspx и, если оно заполнено, вызовите событие, которое вызывается, когда пользователь нажимает кнопку отправки на странице Search.aspx.

Кроме того, если файл Search.aspx использует ту же главную страницу, то вы можете использовать this.Master.FindControl ("txtSearch"), чтобы получить элемент управления (если вы просматриваете источник файла после его создания в В браузере вы заметите, что элементы управления на главной странице на самом деле не вызываются по их идентификатору, скорее, к ним добавлено что-то (то есть теперь это можно было бы назвать "ctl00_txtSearch")

1 голос
/ 25 ноября 2008

Вы можете иметь несколько форм на одной странице, я верю. Таким образом, одна форма (ваша поисковая форма) будет иметь действие search.aspx, а другая - для самой страницы.

1 голос
/ 25 ноября 2008

Вы можете создать форму поиска в отдельной форме и заставить ее использовать GET вместо POST.

Либо так, либо мастер-форма обрабатывает нажатие кнопки поиска и использует Server.Transfer для перехода к форме поиска.

0 голосов
/ 25 ноября 2008

Поскольку ваша форма поиска находится на главной странице, вы, вероятно, можете структурировать ее так, чтобы она содержала 2 формы. Поместите теги формы поиска с действием, установленным на «search.aspx», вне тега, который используется остальной частью сайта.

<body>
    <form action="search.aspx>
        <!--search box and submit button-->
    </form>
    <form runat="server">
        <!--rest of page inc placeholder-->
    </form>
</body>

Если структура страницы не позволяет это сделать, вы можете установить PosbackUrl кнопки отправки, чтобы он указывал на «search.aspx». В этом случае «search.aspx» необходимо будет кодировать, чтобы искать в свойстве PreviousPage данные формы или использовать Request.Form для доступа к входным данным.

0 голосов
/ 25 ноября 2008

Я бы:

  • Добавьте некоторый код в кодовую страницу главной страницы, чтобы определить источник POST.
  • Как только у меня будет источник POST (например, окно поиска). Затем я передам его запрос в форму поиска.

Я использовал аналогичный процесс с HTML-формой входа на главной странице.

Я разместил вопрос и последующее решение здесь - проверьте:

Элементы формы в главных страницах ASP.NET и страницах содержимого

Как только я обнял его, это казалось довольно простым и достаточно элегантным решением.

Преимущество этого заключается в том, что вы имеете полный контроль над тем, как данные отправляются в форму поиска. И вам не нужно включать передачу данных формы в форму поиска и все эти неприятные вещи, просто создайте новый запрос GET на странице поиска и дайте ему сделать то, что он должен делать:

Надеюсь, это поможет.

Примечание:

На странице ASPX может быть только одна форма с runat="server". Дополнительные формы ДОЛЖНЫ быть HTML-формами .

0 голосов
/ 25 ноября 2008

Страницы веб-формы ASP.NET имеют только одну форму (которая обычно включается на главной странице). Вы можете установить URL обратной ссылки для кнопки поиска на страницу поиска.

<asp:Button ID="btnSearch" runat="server" Text="Search" PostBackUrl="~/search.aspx" />

.. или просто перенаправьте его из обработчика на главной странице следующим образом:

protected void btnSearch_Click(object sender, EventArgs e)
{
    Response.Redirect(@"~/search.aspx?q=" + Server.UrlEncode(txtSearch.Text)); 
}

.. или используйте Server.Transfer в соответствии с предложением Дэвида Кемпа.

Примечание: Если вы используете Request.Query [@ "q"] на своей странице поиска для получения запроса, вам не нужно использовать Server.UrlDecode () - это сделано для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...