0

私は次の問題に直面し、ほぼ2日間それと戦ってきました。私は次のコードを持っています。

        protected override void Render(HtmlTextWriter writer)
    {
        string controlOutput;
        string validatorOutput;
        string allOutput;
        StringWriter controlStringWriter = new StringWriter();
        HtmlTextWriter controlHtmlWriter = new HtmlTextWriter(controlStringWriter);

        StringWriter validatorsStringWriter = new StringWriter();
        HtmlTextWriter validatorsHtmlWriter = new HtmlTextWriter(validatorsStringWriter);

        base.Render(controlHtmlWriter);
        controlOutput = controlStringWriter.ToString();

        this.renderValidators(validatorsHtmlWriter);
        validatorOutput = validatorsStringWriter.ToString();

        allOutput = String.Format("{0} {1}", controlOutput, validatorOutput);
        writer.Write(allOutput);
    }

renderValidators関数は次のとおりです。

  private void renderValidators(HtmlTextWriter writer)
        {
            foreach (BaseValidator validator in this.ValidatorsCollection)
            {
                validator.RenderControl(writer);
            }
        }

Render関数は空の文字列を返します。コレクションにあるValidatorのVisibleプロパティはtrueに設定されています。

OnInit関数にバリデーターを追加しています。最初のレンダリング中にvalidator.RenderControl(writer); 空の文字列を返します。ポストバック後、html入力を返し始めます...。

多分誰かがそのような問題に直面しました???

4

1 に答える 1

1

私の理解では、バリデーターをレンダリングする前に、コントロールがページに追加されているかどうかを確認する必要があります。

        Page page = Page;
        if (page == null || page.Request == null) {
            return false;
        }

非常に役立つ例がMSDNにあります。

于 2012-04-04T21:44:26.210 に答える