表单视图和外部 IBindableTemplate

发布于 2024-09-14 12:24:38 字数 1449 浏览 7 评论 0原文

我想在我的自定义 FormView 控件中设置一个用于编辑/插入和查看的模板。但我得到了这些奇怪的异常

无法将类型为“System.Web.UI.LiteralControl”的对象转换为类型为“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);
        }
    }

<编辑:

在第一步中,我创建了新的用户控件并添加了一个formview(“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控件。

如果您能回答我的问题,我将不胜感激。

I would like to set the one template for edit/insert and view in my custom FormView control . But i got these odd exception

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);
        }
    }

edited :

in the first step , I created the new user control and added a formview ("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);
        }
    }
}

Now , I want to convert this user control to web control .

I would appreciate it if you could reply my question.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我喜欢麦丽素 2024-09-21 12:24:38

你到底想做什么?

无论你想做什么,你都做错了。

TemplateContainer(typeof(FormView)) 这是不可能的。

您需要在那里提供您自己的类型,继承自 IDataItemContainer

编辑:

我不建议仅仅因为您想要 1 个用于编辑和插入的模板而投入所有这些精力。最好在两个模板中放置相同的内容。经验表明,随着时间的推移,您将需要不同的编辑和插入功能。

What exactly are you trying to do??

Whatever it is you're trying to do, you're doing it wrong.

TemplateContainer(typeof(FormView)) This is not possible.

You need to provide your own type there, inheriting from IDataItemContainer.

Edit:

I wouldn't recommend putting all this effort just because you want to have 1 template for edit and insert. Better put the same contents in both templates. Experience learns that over time you will want distinct functionallity for edit and insert.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文