【问题标题】:Web User Control Populate Items via XMLWeb 用户控件通过 XML 填充项目
【发布时间】:2013-03-28 06:57:54
【问题描述】:

我有一个 Web 用户控件名称为 Chart Control,我在 Chart Control 中有一个下拉列表 我想像这样填充图表控件的下拉列表:

<UC:ChartControl ID="abc" runat="server">
        <ChartDropDownItems>
            <asp:ListItem Text="Graph_Amount_Items_Sold" Value="0"></asp:ListItem>
            <asp:ListItem Text="Graph_Ranking" Value="1"></asp:ListItem>
            <asp:ListItem Text="Graph_Share_Amount_Items_Sold" Value="2"></asp:ListItem>
            <asp:ListItem Text="Graph_Share_Unit_items_Sold" Value="3" Selected="True"></asp:ListItem>
            <asp:ListItem Text="Graph_Unit_items_Sold" Value="4"></asp:ListItem>
        </ChartDropDownItems>
    </UC:ChartControl>

在 .cs 代码中

 [DefaultProperty("ChartDropDownItems"),
    ParseChildren(true, "ChartDropDownItems"), PersistChildren(false),
    ToolboxData("<{0}:ChartControl runat=\"server\"> </{0}:ChartControl>")]

    public partial class ChartControl : System.Web.UI.UserControl
    {
     private List<ListItem> lst;
            [Browsable(true)]
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
            [PersistenceMode(PersistenceMode.InnerProperty)]

            public List<ListItem> ChartDropDownItems
            {
                set
                {
                    lst = value;
                    Bind_ddChartChange();
                }
            }
     private void Bind_ddChartChange()
            {

                if (lst != null)
                {
                    ddChartChange.DataSource = lst;
                    ddChartChange.DataTextField = "Text";
                    ddChartChange.DataValueField = "Value";
                    ddChartChange.DataBind();
                    ListItem li = lst.Find(x => x.Selected == true);
                    ddChartChange.SelectedValue = li.Value;

                }
            }
}

当我编译和运行它对我来说很好,但在设计时它说

"Error Creating Control"
"Type'System.Web.UI.Control' does not have a public property named 'ChartDropDownItems'"

即使在设计时我也想工作。 任何机构都可以相应地建议我吗? 谢谢。

【问题讨论】:

  • 你能发布ChartControl的标记吗?

标签: asp.net web-user-controls


【解决方案1】:

好吧,经过几个小时的 google-fu,我得出的结论是,要么无法在设计器中看到内部子标签,要么没有人费心就如何做到这一点给出一个好的答案。

根据wonkim00's answer,这是来自MSDN site的引用:

注意:Visual Studio 设计器不支持模板化的 ASP.NET 用户控件。但是,您可以在 Visual Studio 中编译和运行此示例。为此,当您创建 ASP.NET 页面来测试此代码时,请将页面中所有设计器生成的代码替换为示例清单中的代码和标记。

但是,正如您所知道的,这是针对模板的通知,但在我尝试了许多其他数据类型(列表、集合、数组列表)之后,它似乎是一样的。

可能有一个我们都缺少的属性使它在设计器中可见,但它似乎非常隐藏(请任何人,随时证明我错了)。

我只是觉得代码编译和工作很奇怪,但是你不能让设计师闭嘴因为缺少属性。

我使用的链接:

也许这些会有所帮助,也许不会。很抱歉这个坏消息,但这是我能找到的最好的。

【讨论】:

    【解决方案2】:

    确保您的类名为 ChartControl,并且它派生自 UserControl 而不是 Control 这可能是导致此错误的原因,希望对您有所帮助。

    【讨论】:

    • 我向您保证它是从 UserControl 派生的。但在 asp.net 网页设计时不起作用。
    • 奇怪的是,您收到的错误消息是指 Web.UI.Control 而不是 Type Web.UI.UserControl,不知何故,您缺少对 usercontrol 的强制转换,这使得它可以搜索 Web 中的公共属性。改为 UI.Control。
    • 我添加了这个类的正确声明。您可以查看更新的版本。
    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 2016-11-28
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多