2014-12-27 70 views
2

我想在代碼後面的文件中使用必需的字段驗證程序,但它顯示以下錯誤。C#代碼中所需的字段驗證程序#

錯誤:

Unable to find control id 'TextBox1' referenced by the 'ControlToValidate' property of 'abcd854' 

注:TextBox1的頁面存在。我已經測試過它。

enter image description here

ASPX頁面

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 

    <p> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="save" />  
    </p> 
    <p> 
     &nbsp;<asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 
</asp:Content> 

銫文件

public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      //RequiredFieldValidator validator = ControlsValidation.AssignRequiredFieldValidatorToControl(TextBox1, "Field is required", "*", "save"); 
      //validator.ControlToValidate = ((TextBox)this.Form.FindControl("MainContent").FindControl("TextBox1")).ID; 


      RequiredFieldValidator validator = new RequiredFieldValidator(); 
      validator.ID = "abcd" + new Random().Next(100, 1000); 
      validator.ControlToValidate = ((TextBox)this.Form.FindControl("MainContent").FindControl("TextBox1")).ID; 
      validator.EnableClientScript = true; 
      validator.ErrorMessage = ""; 
      validator.Text = "*"; 
      validator.ValidationGroup = "save"; 
      validator.Display = ValidatorDisplay.Dynamic; 

      this.Controls.Add(validator); 
     } 
    } 
+0

代碼嘗試設置文本框的ID模式,靜態 – qamar

+0

沒有工作。運氣不好 –

+0

當你找到控件時((TextBox)this.Form.FindControl(「MainContent」)。FindControl(「TextBox1」)); – qamar

回答

3

我終於得到了解決。問題是

this.Controls.Add(validator); 

大家都可以看到,textbox在子頁面的意思是「Content Page」所以在使用上面的代碼行,當其添加在母版頁的控制,其中有一個id沒有控制「 TextBox1「。

因此更改上面的代碼符合後:

this.Form.FindControl("MainContent").Controls.Add(validator); 

其工作完美。

感謝

-2

嘗試使用,而不是客戶端ID ID

RequiredFieldValidator validator = new RequiredFieldValidator(); 
validator.ID = "abcd" + new Random().Next(100, 1000); 

validator.ControlToValidate = ((TextBox)this.Form 
      .FindControl("MainContent").FindControl("TextBox1")).ClientID; 

validator.EnableClientScript = true; 
validator.ErrorMessage = ""; 
validator.Text = "*"; 
validator.ValidationGroup = "save"; 
validator.Display = ValidatorDisplay.Dynamic; 

this.Controls.Add(validator); 
+1

沒有任何工作。 –

2

在asp.net,渲染你的頁面後, TextBox的ID將被更改(請參閱瀏覽器中的源代碼)。您可以將其客戶端ID模式更改爲靜態,以便它不會更改。

Add ClientIDMode="Static"在文本

<asp:TextBox ID="TextBox1" runat="server" ClientIDMode="Static"></asp:TextBox> 
1

嘗試......

背後

oTexbox1.Attributes["required"] = "true"; 
+0

這工作,但如何添加錯誤消息和任何其他屬性,像添加CSS等? – Bhat