2

RegularExpressionValidatorプログラムでコンテナー コントロール (パネル、プレースホルダーなど) に を追加する際に問題が発生しています。これが私のコードです:

// Get the path of the file on the server
string page = Page.Request.FilePath;
int managementCompanyId = Convert.ToInt32(Session["ManagementCompanyId_AddResident"].ToString().Trim());

// Get field validation details
Collection<ExportFieldValidation> details = ValidationBL.GetValidationDetails(managementCompanyId, page);

ContentPlaceHolder body = Page.Form.FindControl("ContentBody") as ContentPlaceHolder;

foreach (ExportFieldValidation detailItem in details)
{
    // Check if the control exists on the page
    TextBox control = body.FindControl(detailItem.FieldToValidate) as TextBox;

    if (control != null)
    {
        RegularExpressionValidator regex = new RegularExpressionValidator()
        {
            ControlToValidate = control.UniqueID.ToString(),
            ID = detailItem.ValidatorFieldName,
            ValidationExpression = detailItem.RegularExpression,
            Page = this,
            SetFocusOnError = true,
            Text = detailItem.ErrorMessage,
            Enabled = true,
            EnableViewState = true,
            CssClass = "Error"
        };

        Panel validationPanel = body.FindControl("PanelAddResident") as Panel;

        validationPanel.Controls.Add(regex);
    }
}

ページに移動すると、エラーが表示されますUnable to find control id 'myControl' referenced by the 'ControlToValidate' property of 'RegularExpressionValidatorResidentId'。ここで、コントロールはcontrol.UniqueID.ToString()上からのものであり、データベースに保存されており、値を二重、三重、および四重にチェックしたため、確かに正しいです。

ただし、すべてを置き換えるvalidationPanel.Controls.Add(regex);Page.Form.Controls.Add(regex);完全に機能します。

バリデーターをコンテナーに追加する方法はありますか? 私は何か間違ったことをしているだけか、どこか途中でステップを逃していると確信しています。どんな助けでも大歓迎です。

4

1 に答える 1

1

この部分は間違っています:

ControlToValidate = control.UniqueID.ToString()

これを使用する必要があります:

ControlToValidate = control.ID;

ID前に for コントロールを 提供する必要があります。UniqueIDコンポーネントがクライアントで持つ名前ですが、Validator コントロールはサーバー側のコントロール名を使用してこれを行います。

于 2013-05-08T18:29:25.903 に答える