Member 13142345 Ответов: 2

Как разнести значения с одной страницы проекта aspx на другую страницу проекта aspx


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

Основной проект --> ReservationDetails.aspx
Проводки в
Центральный проект-->PaymentRequest.aspx
затем разместите те же значения на странице платежного шлюза.

После возвращения со страницы paymentgateway

Центральный проект --> Reposnse.aspx
и должен публиковать те же самые значения в
Основной проект --> Reposnse.aspx

После перенастройки страницы from paymentgateway я использовал приведенный ниже код

Что я уже пробовал:

Сессия["MerchantCode"] = Запрос.Из[MerchnatCode]
таким образом, я собрал значения для сеансов и перенаправления на другую страницу проекта с помощью
Ответ.Перенаправление("Rep. aspx",false)
Но я обнаружил, что значения сеанса пусты после попадания на страницу Rep.aspx.

поэтому я собрал код, чтобы

У меня разные торговые коды для разных отелей.
поэтому, основываясь на данном торговом коде, мне нужно разместить значения в URL-адресе метода действия.

Итак, как я могу опубликовать значения на другой URL-адрес, используя метод action на странице aspx
или в любом случае есть способ достичь этого в коде C#.

Есть ли возможность динамически менять форму методом POST с кодом поддержал.

2 Ответов

Рейтинг:
2

wevper

Существует множество способов передачи данных на другую страницу.

Если оба ваших проекта являются C#, то вы можете использовать DataTable/ByteArray в качестве одного из возможных решений для этого.

В вашем основном проекте вы можете сделать что-то вроде этого:

DataTable dt = new DataTable();
dt.Columns.Add("transaction_id");
dt.Columns.Add("user_id");
dt.Columns.Add("amount", typeof(decimal));

dt.Rows.Add("AA0001", "1234", 450.90m);

byte[] ba = ConvertToBytes(dt);

string data = Convert.ToBase64String(ba);
string dataEncoded = Server.UrlEncode(data);

Response.Redirect("http://www.centralprojet.com/PaymentRequest.aspx?q=" + dataEncoded);

А затем, в вашем Центральном проекте, в методе Page_Load (), вы можете сделать что-то вроде этого:
string dataEncoded = Request.QueryString["q"];
string data = Server.UrlDecode(dataEncoded);

byte[] ba = Convert.FromBase64String(data);

DataTable dt = ConvertToObject<DataTable>(ba);

string transaction_id = dt.Rows[0]["transaction_id"] + "";
string user_id = dt.Rows[0]["user_id"] + "";
decimal amount = (decimal)dt.Rows[0]["amount"];

Если вы хотите, чтобы процесс был выполнен в бэкэнде без перенаправления на другую страницу, то вы делаете это молча, не уведомляя пользователя/браузер.
DataTable dt = new DataTable();
dt.Columns.Add("transaction_id");
dt.Columns.Add("user_id");
dt.Columns.Add("amount", typeof(decimal));

dt.Rows.Add("AA0001", "1234", 450.90m);

byte[] ba = ConvertToBytes(dt);
WebClient wc = new WebClient();
byte[] baResult = wc.UploadData("http://www.centralproject.com/PaymentRequest.aspx", ba);

string result = System.Text.Encoding.UTF8.GetString(baResult);

Затем, в вашем CentralProject, вы можете молча обрабатывать данные и возвращать результат с помощью backend тоже:
byte[] ba = Request.BinaryRead(Request.ContentLength);

DataTable dt = ConvertToObject<DataTable>(ba);

string transaction_id = dt.Rows[0]["transaction_id"] + "";
string user_id = dt.Rows[0]["user_id"] + "";
decimal amount = (decimal)dt.Rows[0]["amount"];

// do something

Response.Write("success");

Вот кодовый блок для преобразования объекта в байтовый массив:
public static byte[] ConvertToBytes(Object obj)
{
    using (MemoryStream ms = new MemoryStream())
    {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }
}

public static T ConvertToObject<T>(byte[] bytes)
{
    using (MemoryStream memStream = new MemoryStream(bytes))
    {
        BinaryFormatter bf = new BinaryFormatter();
        var obj = (T)bf.Deserialize(memStream);
        return obj;
    }
}


Member 13142345

Спасибо за решение wevper. я попытался разместить значения в виде байтового массива после кодирования. Это работает нормально, и они кодируются, но после перенаправления на страницу ответа в Центральном проекте браузер говорит, что 404 не найдена ошибка. страница доступна в проекте, но та же ошибка

wevper

Дважды проверьте, что страница ответа жива в интернете.

wevper

Я предполагаю, что вы не печатаете это: "http://www.centralprojet.com/PaymentRequest.aspx" как www.centralproject.com это пример, который должен быть заменен вашим фактическим доменом.

Member 13142345

да, страница ответа жива. если я не использовал закодированную строку запроса, то страница загружается. но когда я включил закодированную строку запроса, то ошибка появляется как 404 not found.

wevper

Попробуйте поставить точку останова или шаг за шагом протоколировать действие, чтобы узнать, какая страница (или ресурсы) на самом деле "не найдена" (404). Это может быть что-то еще, выходящее за рамки нашего обсуждения.

Рейтинг:
2

F-ES Sitecore

Во-первых, "propject" - это просто способ группировки определенных файлов в IDE, он не имеет никакого отношения к тому, как будет функционировать конечный сайт. В зависимости от того, что вы делаете со своими проектами, они могут иметь возможность поделиться сеансом, а могут и нет. Если каждый проект развертывается на другом веб-сайте, то они не могут совместно использовать сеанс.

Если вы хотите опубликовать сообщение на url-адрес, к сожалению, вам придется сделать это с помощью javascript. Создайте страницу, содержащую форму с требуемым url-адресом действия, и поместите значения формы в скрытые поля, а затем используйте javascript для отправки формы при загрузке страницы. Это немного неуклюже, но это единственный способ.

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


Member 13142345

Да. Я сделал это с помощью Javascript ранее для размещения значений.
Но есть ключевое значение, которое я получаю от paymentgateway, и на основе этого ключевого значения я должен динамически изменять URL-адрес. но в методе действия на странице aspx нужно написать только один адрес в URL-адресе. Итак, вы можете помочь мне перейти к различным URL-адресам на основе ключа значения из бэкенда.
Заранее спасибо