如何在C#中发布和验证“命名”输入?

时间:2011-03-30 14:43:43

标签: c# asp.net webforms

我需要在C#中将表单发布到第三方网址。必须命名输入字段以匹配第三方期望的内容(在本例中为“电子邮件地址”等)。如果我使用标准的“输入”标签,我没有很好的方法来验证控件。如果我在这个例子中使用“asp:TextBox”,它将重命名我的字段并搞砸我的帖子。救命!

     <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>

2 个答案:

答案 0 :(得分:2)

首先,尝试将ClientIDMode设置为静态。我知道这将使ID保持静态,但不确定name属性。

您也可以尝试保留输入而不使用asp:TextBox,但无论如何都要将runat =“server”放在上面,看看它是否保留了您的名字。像这样:

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

顺便问一下,为什么你的变量名中会有空格?不计算。

答案 1 :(得分:1)

如果您直接从表单发布到第三方而不回发到服务器,那么传统asp.net Web表单中最简单的方法是创建表单,然后将其操作设置为第三方URL明确地使用普通的旧基本HTML和标签来介绍内容。然后,您引入javascript来验证客户端上的字段。

如果您回复到您的服务器,然后发布到第三方,这没有任何问题,因为您可以按照自己喜欢的方式格式化帖子。