2011-03-30 4 views
0

C#のサードパーティURLにフォームを投稿する必要があります。入力フィールドには、第三者が期待しているもの(この場合は「電子メールアドレス」など)と一致する名前を付ける必要があります。私は標準の "入力"タグを使用する場合、私はコントロールを検証するための素晴らしい方法はありません。この例のように "asp:TextBox"を使用すると、フィールドの名前が変更され、投稿が不正になります。助けて!C#で "名前付き"入力を投稿および検証する方法は?

 <asp:TextBox id="CustomerEmailInput" runat="server" 
      name="Email Address" 
      CssClass="tb5a" >  
    </asp:TextBox> 
    <asp:RequiredFieldValidator ID="customerEmailRequired" runat="server" 
      ControlToValidate="CustomerEmailInput" 
      display="Dynamic" 
      ErrorMessage="*"> 
    </asp:RequiredFieldValidator> 
    <asp:Button runat="server" 
      PostBackUrl="http://ThirdPartyUrl.com" 
      Text="Submit" /> 

したがって、上記は次のようになります。私は "電子メールアドレス"の名前が必要です、または私は入力フィールドを検証するための良い方法が必要です(この例は単純化され、より多くのフィールドとより多くの正規表現の検証があります)。

<div> 
    <input type="text" name="ctl00$ContentPlaceHolder1$CustomerEmailInput" class="tb5a" id="ctl00_ContentPlaceHolder1_CustomerEmailInput"> 
    <span style="color: Red; display: none;" id="ctl00_ContentPlaceHolder1_customerEmailRequired">*</span> 
    <input type="submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$ctl00&quot;, &quot;&quot;, true, &quot;&quot;, &quot;http://thirdpartyurl.com&quot;, false, false))" value="Submit" name="ctl00$ContentPlaceHolder1$ctl00"> 
</div> 

答えて

1

あなたがサーバーにポストバックせずに、サードパーティへのフォームから直接投稿されている場合には、伝統的なasp.netのWebフォームでの最も簡単な方法は、フォームを作成し、それはへのアクションの設定することです第三者のURLを明示的に使用し、コンテンツを導入するためのタグ付きの単純な古い基本HTMLを使用します。次に、javascriptを導入して、クライアント側のフィールドを検証します。

サーバーにポストバックしてからサードパーティに投稿しても、あなたが好きな方法で投稿をフォーマットできるので、何の問題もありません。

+0

バリデータホイールを再作成したくありません。お勧めのJavascript検証ライブラリがありますか?私はいくつかの正規表現検証、透かし、必要なフィールドなどを行う必要があります。 – Evan

+0

jQueryは、スタックオーバーフローに従ってすべてのことを行います:http://meta.stackexchange.com/questions/19478/the-many-memes-of-meta/19492# 19492 = D – Tejs

2

まず、ClientIDModeを静的に設定してみてください。 IDは静的に保ちますが、名前属性についてはわかりません。

また、asp:TextBoxを使用せずに入力を維持することもできますが、とにかくrunat = "server"を入力して名前が保持されているかどうかを確認してください。このようなもの:

<input type="text" name="EmailAddress" id="EmailAddress" runat="server" /> 

ところで、なぜあなたの変数名にスペースがありますか?計算しません。

+0

これは、.NET 4を使ってEvanが提供した元のマークアップのとおり、 'name'と' id'属性の両方を確実に保持します。スペースを使ってこれらを生成する簡単な方法はありません。それらの属性にも変数名にも許可された文字ではありません。 –

+0

ありがとうございます。私はClientIDModeを横断しましたが、私は利用できない4.0です。また、私の最初の例と同じ結果、2番目の解決策を試みました。 スペースはダムですが、私はAPIを制御できません。投稿は "Email Address"という名前の入力で正常に動作しているようです。 – Evan

+0

だから、第三者のURLに直接投稿していますか?または、独自のポストバックを行い、コードビハインドでフォームデータをサードパーティのURLに送信していますか? – Kon

関連する問題