Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> POST метод в ASP.NET при использовании 2х страниц, POST метод в ASP.NET при использовании 2 
:(
    Опции темы
cosamia
Дата 19.1.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



Есть 2 формы: index1.aspx , index2.aspx
index1.aspx должен передать методом пост данные с формы в index2.aspx
(index1.aspx в index1.aspx передает без проблем.)
есть ли пример как это сделать?
PM   Вверх
FatherFrost
Дата 20.1.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Вот к примеру можно так:
index1.aspx
Код

<HTML>
<HEAD>
   ......................................
</HEAD>
<BODY>

................................................
<form action='index2.aspx' method='POST'>
      <p>Your Name</p>
      <input name= 'userName' type='text'>
      <p>Your Password</p>
      <input name='userPass'   type='password'>
      <input name=btnSubmit type='submit' value='Ok'>&nbsp;&nbsp;&nbsp;
      <input name=btnReset type='reset' value='Cancel'
</form>

....................................................

</BODY>
</HTML>


Теперь пишем второй файл с серверным скриптом на VBScript. Файл index2.aspx:
Код

<%@ Language=VBScript%>
<HTML>
<HEAD>
  ...................................................
</HEAD>
<BODY>
    <h1>Your account information is:</h1>
    <p align='center'>
           UserName: <%= Request.Form("userName")%>
           Password: <%= Request.Form("userPass")%>
    </p>
</BODY>
</HTML>


Вот вроде и все... Может конечно здесь будут ошибки и недочеты и пример довольно примитивный.....
Ну может потом старожилы раздела еще что тебе подкинут.



--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
cosamia
Дата 20.1.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



не, этот пример - прямо чистой воды ASP. А меня интересовало сделать именно на 100%asp.net ресурсах.
я вот подумал, может в index1.aspx
объявить св-во
public string val{
get{...}
set{...}
}

а уже в index2.aspx как то попытаться к нему обратиться....такой подход не сработает?
PM   Вверх
FatherFrost
Дата 20.1.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Ну тогда если я правильно понял:
index2.aspx
Код

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index2.aspx.cs" Inherits="index2" %>
<!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>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:textbox ID="Textbox1" runat="server"></asp:textbox>    
    </div>
    </form>
</body>
</html>

Теперь для страницы пишем класс index2.aspx.cs:
Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Textbox1.Text = this.Request.Form.Get(0);
    }
}

Таким образом при переходе на вторую страницу ты отобразишь в поле самый первый параметр предыдущей страницы (они индексуются с нуля) - userName.
Добавлено @ 16:03
Можно еще и так....
Код

Textbox1.Text = this.Request.Form["userName"];

Я просто до этого на Java немного под WEB писал, поэтому не сразу нашел как по имени получать...


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
cosamia
Дата 20.1.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



что-то не работает....

при Label1.Text=this.Request.Form.Get(0);
на range ругается

а при Label1.Text=this.Request.Form["TextBox1"];
вообще пусто, ничего не пишет...

да и потом, как вы передали управление с index1.aspx на index2.aspx?
неужели через action="index2.aspx" ?
PM   Вверх
FatherFrost
Дата 20.1.2006, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Да конечно... Это нужно смотретьспецификацию тега FORM.... Фактически после сабмита формы вызывается ее экшин. Это может быть и скрипт, а может быть и просто ссылка.
После чего броузером формируется HttpRequest, который получает веб-сервер (в данном случае IIS). После чего на следующей aspx-странице или в классе ее поддержки можешь извлекать из request'a всю нужную информацию. Это и http-заголовки и параметры запроса (т.е. поля формы в данном случае)
Если ругается на range, то соответственно ты в запросе не передаешь ни одного параметра методом ПОСТ. Это либо не указан точно метод обработки запроса (для тега FORM параметр method). Если я не ошибаюсь, по умолчанию берется GET, то соответственно нужно использовать не
Код

Label1.Text=this.Request.Form.Get(0); 
или
Label1.Text=this.Request.Form["TextBox1"];

а работать уже с GET-запросом вместо Form ипсользовать аналогично Param.... А так лучше код свой приведи...



--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
arilou
Дата 24.1.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



А можно воспользоваться методом Server.Transfer. Тогда flow будет такой:

1) index1.aspx постит форму на себя
2)в page_load делается Server.Transfer на index2.aspx. Все данные формы index1 передаются на index2

smile И не надо ничего изобретать.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
cosamia
Дата 24.1.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 11.5.2005

Репутация: нет
Всего: нет



Цитата(arilou @ 24.1.2006, 11:53)



Мысль хорошая.
Как в index2.aspx вытащить данные? Request.Form("TextBox1");
не проходит...
PM   Вверх
arilou
Дата 24.1.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Цитата(cosamia @ 24.1.2006, 12:57 Найти цитируемый пост)

Как в index2.aspx вытащить

Юзать hidden-поля. Так, как ты хочешь, не получится, потому что ASP.NET сам генерит имена полей.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
FatherFrost
Дата 24.1.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Описаная мною методика широко применяется в Java для передачи данных из формы далее...

Цитата(arilou @ 24.1.2006, 11:53 Найти цитируемый пост)

1) index1.aspx постит форму на себя
2)в page_load делается Server.Transfer на index2.aspx. Все данные формы index1 передаются на index2


Вот это как раз, по моему, велосипед.... Зачем постить на себя и передавать далее???? Это получается сначало мы передаем данные со страницы на себя, а затем только на вторую страницу (если я правильно понял...) Помоему рациональнее передавать их сразу, т.к. эти данные уже будут содержаться в Http-запросе, а на следующей странице остается только этот запрос проанализировать на наличие определенных параметров.... Можно конечно еще через сессию кидать, но это тоже не дело...

arilouЕсли я не прав, разъясни плиз в чем преимущество твоего метода..... Мне, как работавшему с веб-программированием на Java, это кажется не очень удобным и слегка запутанным...


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
arilou
Дата 24.1.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



FatherFrost
В принципе, все достаточно просто. Как известно, упрощенный цикл жизни у ASP.NET страницы такой:

Браузер -> Get запрос -> ASP.NET -> Поиск нужного code-behind класса и создание его инстанса -> Обработка HttpRequest'а найденным классом. -> Посылка HTML браузеру -> Браузер -> Submit формы -> Post запрос и т.д.

Значицца, в ASP.NET есть 2 метода передачи управления между страницами: Response.Redirect и Server.Transfer. Первый фактически создает новый GET запрос для сервера, в то время как второй передает текущий HttpRequest другому code-behind классу. Поэтому велосипеда нет, как и повторного постинга данных.

Это сообщение отредактировал(а) arilou - 24.1.2006, 14:43


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
FatherFrost
Дата 24.1.2006, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



arilou Все равно я не вижу какой либо пользы от такой реализации...

К тому же в МСДН указывается и недостаток этого метода:
Цитата

By dynamically using a server-side method  In this scenario, the server simply transfers the context to another page. The advantage is that you can share page context information between pages. The disadvantage is that the user's browser does not know about the transfer, so the browser's history is not updated. If the user refreshes the page, unexpected results can occur.


Насколько я понимаю данный сценарий передачи инфы специфичен для конкретных задач, а в некоторых случаях он вовсе не нужен и может быть даже нежелателен...


--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
arilou
Дата 24.1.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



FatherFrost
Оно то так, но все надо применять с умом, как и написано в MSDN smile Если ты знаешь, что делаешь, то все нормально. Использовать свои мозги еще никто не запрещал.

Я довольно долго занимаюсь программингом под ASP.NET, поэтому могу тебе сказать, что вариант с использованием form action='index2.aspx' не очень хорош в принципе, также как и мой. Принято постить на ту же страницу и использовать ASP.NET web-controls для пользовательского ввода. Более того, ASP.NET 1.x не поддерживает несколько форм на одной странице.

Так что такие вот дела.

cosamia
А зачем вообще постить на другую страницу? Наверняка это необязательно и какой-нить анахронизм со времен classic ASP smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
FatherFrost
Дата 24.1.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почетный Мороз
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 27.4.2005
Где: Крайний север

Репутация: нет
Всего: 6



Цитата(arilou @ 24.1.2006, 16:37 Найти цитируемый пост)

cosamia
А зачем вообще постить на другую страницу? Наверняка это необязательно и какой-нить анахронизм со времен classic ASP smile


Вот это уже наверно более интересное и перспективное решение.... Потому что во многих случаях удобнее работать с одной страницей, чем с последовательностью страниц и переходов...



--------------------
Задаю много глупых вопросов....
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.