2010-05-14 45 views
0

我開發了一個處理在線支付的組件。在特定時間點,用戶必須重定向到選定的收單機構網站進行身份驗證。收購方本身建議應該有一個網頁來完成它。如下所示,如何使用HttpResponse或其他內容創建組件的動態http響應

<!--TakeOff.aspx--> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>@</title> 
    <script type="text/javascript"> 
     function Go() { 
      form1.submit(); 
     } 
    </script> 
</head> 
<body onload="Go();"> 
    <form id="form1" runat="server" method="post" action="https://acquirer/..."> 
    <div> 
     <asp:HiddenField ID="MID" runat="server" /> 
     <asp:HiddenField ID="Amount" runat="server" /> 
     <asp:HiddenField ID="ResNum" runat="server" /> 
     <asp:HiddenField ID="RedirectURL" runat="server" /> 
    </div> 
    </form> 
</body> 
</html> 

此頁面重定向用戶並將需要的參數發佈到收單方的網站。在此頁面之前,還有另一個帶有付款按鈕的頁面(例如)。在付款按鈕的點擊事件中,我的組件被實例化並且完成了所需的計算。一些諸如以下,

protected void btnPayment_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     var paymentProcessor = new NS.PaymentProcessor(/*required arguments*/); 
     /*...*/ 
     NS.Result result = paymentProcessor.Calc(); 

     Session.Add("PaymentProcessResult", result); 
     Response.Redirect("TakeOff.aspx"); 
    } 
    catch (Exception p) 
    { 
     throw p; 
    } 
} 

什麼,我要做的就是通過支付處理器組件生成[TakeOff.aspx]在運行時頁面而不是靜態頁面(我的意思是aspx頁面在開發階段產生)。原因是我們可能有不同的收購方,每個收購方都需要發佈自己的論點。因此,如果付款處理器組件在運行時生成aspx甚至html頁面,我們不需要重新編譯和重新部署Web應用程序。

我的問題是,我不知道如何在運行時生成aspx頁面。我不是ASP.NET大師,並且我使用HttpResponse所做的所有努力都是徒勞的,因爲原始頁面不會將控件傳遞到生成的頁面。

任何幫助,將不勝感激。 謝謝

回答

1

生成一個aspx頁面不是解決此問題的好方法。我想我會這樣做:

在您的C#代碼中定義了每個收單機構預期的表單值。例如:

public string GenerateForm() 
{ 
    StringBuilder sb = new StringBuilder(); 

    Dictionary<string, string> inputs = new Dictionary<string,string>(); 

    // Maybe this comes from a database instead? 
    switch (Request["acquirer"]) 
    { 
     // Add more here 
     case "acquirer1": 
      inputs = new Dictionary<string, string> 
      { 
       { "MID", "SOMETHING" }, 
       { "Amount", "SOMETHING" } 
       // ... 
      }; 
      break; 
    } 

    // Make each input 
    foreach (KeyValuePair<string, string> input in inputs) 
    { 
     sb.Append(
      "<input type=\"hidden\" name=\"" + input.Key + "\" value=\"" + input.Value + "\" />" 
     ); 
    } 

    return sb.ToString(); 
} 

然後,只需將此生成的HTML插入到表單中即可。

+0

尊敬的卡萊布, 非常感謝您的關注和您提供的解決方案, 請您告訴我爲什麼在運行時生成aspx或html頁不是一個好習慣?請考慮可能生成一個包含表單和隱藏字段的HTML頁面(使用HttpResponse或其他組件),並且HTML頁面被動態地創建並輸出到客戶端,然後表單提交併且一切似乎都正常。問題是來自原始頁面的控制不會傳輸到生成的html頁面。你有什麼主意嗎? (再次感謝很多) – anonim 2010-05-14 16:12:36

相關問題