0

カスタム FormView コントロールで編集/挿入および表示用の 1 つのテンプレートを設定したいと思います。しかし、私はこれらの奇妙な例外を得ました

Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.Table'.

public class CustomFormView : FormView
    {
        [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(FormView), BindingDirection.TwoWay)]
        public IBindableTemplate FormTemplate { get; set; }

        protected override void OnInit(EventArgs e)
        {
            ChangeMode(FormViewMode.Edit);
            if (FormTemplate != null)
            {
                if (CurrentMode == FormViewMode.Edit)
                {
                    FormTemplate.InstantiateIn(this);
                }
            }
            base.OnInit(e);
        }
    }

編集:

最初のステップで、新しいユーザー コントロールを作成し、フォームビュー ("FV") を追加しました。

public partial class Form : UserControl
{
    private IBindableTemplate _template = null;

    [PersistenceMode(PersistenceMode.InnerProperty),
    TemplateContainer(typeof(FormView), System.ComponentModel.BindingDirection.TwoWay)]
    public IBindableTemplate FormTemplate { set;get }

    protected void Page_Init()
    {
        if (FormTemplate != null)
        {
            FV.InsertItemTemplate = FV.EditItemTemplate = FormTemplate;
            if (!IsPostBack) FormTemplate.InstantiateIn(FV);
        }
    }
}

ここで、このユーザー コントロールを Web コントロールに変換したいと思います。

私の質問に答えていただければ幸いです。

4

1 に答える 1

1

いったい何をしようとしているのか??

あなたがしようとしていることが何であれ、あなたはそれを間違っています。

TemplateContainer(typeof(FormView))これは不可能です。

から継承して、そこに独自のタイプを提供する必要がありますIDataItemContainer

編集:

編集と挿入用に 1 つのテンプレートが必要だからという理由だけで、これだけの労力を費やすことはお勧めしません。両方のテンプレートに同じ内容を入れた方がよいでしょう。経験から、時間の経過とともに、編集と挿入に異なる機能が必要になることがわかります。

于 2010-08-17T13:13:32.303 に答える