1

私は現在 Sitecore を使用しており、フォームによって収集された情報を使用して支払いサイトに情報を投稿する POST アクションを作成しようとしています。Sitecore が HTML からタグを削除することを知っていると、少し面倒になります。いくつかの検索の後、javascriptを使用して動的フォームを作成し、それを送信して質問に答えることができることがわかりました.

基本情報への入力またはリンクは大歓迎です。

私のフォームコードは次のようになります。

<fieldset id="PayForm" > <br>
<!--Store Settings-->
<input type="Hidden" name="ps_store_id" value="******" />
<input type="Hidden" name="hpp_key" value="*******" />
<input type="Hidden" name="charge_total" value="40.00" />
<!--Item Details-->
<input type="hidden" value="1" name="quantity1" />
<input type="hidden" value="Public Speaking" name="description1" />
<select name="id1">
<option>Select Date...</option>
<option value="Sep22PubSp"> Sept-22
</option>
<option value="Sep29PubSp"> Sept-29
</option>
<option value="Nov19PubSp"> Nov- 19
</option>
</select>
<br />
<input type="hidden" value="40" name="price1" />
<!--Student Details-->
First Name<input type="text" name="ship_first_name" value="First Name" />  Last Name  <input type="text" name="ship_last_name" value="Last Name" /> <br />
Student ID#: <input type="text" name="cust_id" value="Student ID" /><br />
Email<input type="text" name="email" value="Email" /> <br />
CCID<input type="text" name="note" value="CCID" /><br />
</fieldset>

そして、これが私のJavascriptがどのように見えるかです

<script type="text/javascript">// <![CDATA[
function post_to_url() {

    // The rest of this code assumes you are not using a library.
    // It can be made less wordy if you use one.
    var form = document.createElement("form");
    form.setAttribute("method", "post");
    form.setAttribute("action", "******WEBSITE HERE*******");
    form.setAttribute("target", "tfl");

    var fieldset = document.getElementById("PayForm");
    var copy = fieldset.cloneNode(true);

    var description1 = document.getElementById("type_description1_form");
    var ship_first_name = document.getElementById("type_ship_first_name_form");
var ship_last_name = document.getElementById("type_ship_last_name_form");
var cust_id = document.getElementById("cust_id");
var email = document.getElementById("type_email_form");
var note = document.getElementById("type_note_form");

    var description1Input = document.createElement("input");
    description1Input.setAttribute("name", "type_description1");
    description1Input.setAttribute("value", description1.options[description1.selectedIndex].value);

    var ship_first_nameInput = document.createElement("input");
    destinInput.setAttribute("name", "type_ship_first_name");
    destinInput.setAttribute("value", ship_first_name.options[ship_first_name.selectedIndex].value);

    var ship_last_nameInput = document.createElement("input");
    ship_last_nameInput.setAttribute("name", "type_ship_last_name");
    ship_last_nameInput.setAttribute("value", ship_last_name.options[ship_last_name.selectedIndex].value);

    var cust_idInput = document.createElement("input");
    cust_idInput.setAttribute("name", "type_cust_id");
    cust_idInput.setAttribute("value", cust_id.options[cust_id.selectedIndex].value);

    var emailInput = document.createElement("input");
    emailInput.setAttribute("name", "type_email");
    emailInput.setAttribute("value", email.options[email.selectedIndex].value);

    var noteInput = document.createElement("input");
    noteInput.setAttribute("name", "type_note");
    noteInput.setAttribute("value", note.options[note.selectedIndex].value);


    form.appendChild(copy);
    form.appendChild(originInput);
    form.appendChild(destinInput);

    document.body.appendChild(form);
    form.submit();
};
// ]]></script>

お時間をいただきありがとうございます!

4

1 に答える 1

5

ここでの問題は、Sitecoreがタグを形成することではありません。問題は、ASP.Net Webフォームで作業していることです。これには、フォームについて特別な考慮が必要です。これは、sitecoreのコンポーネントを表示するために属性runat="server"が機能しているフォームタグがすでにあるためです。

とは言うものの、書かれているJavaScriptはSitecoreの環境では機能しません。ASP.NetWebフォーム内にhtmlフォームをネストすることはできません。

フォームの送信をサポートするためのASP.netテンプレートの変更の基本については、次の記事を参照して ください。http ://www.sitepoint.com/net-form-processing-basics/ または、期待どおりにフォームを作成することもできます(繰り返しますが、javascriptなしで)純粋なhtmlとして、IFrameのサイトコアコンポーネントテンプレート(.ascxコントロール)に含めます。

于 2012-09-21T16:59:08.393 に答える