生成本地资源和我的简单自定义控件的问题

时间:2011-03-02 10:51:18

标签: c# asp.net

我创建了基于点网控制的简单控件。例如,有一个基于dot net GridView控件的简单GridView控件,我只是在我的控件中设置一些设置以在我的.aspx页面中使用它,例如我在构造函数方法中设置GridView的宽度:

// constructor of my custom class
public GridView(): base()
        {
            this.Width = new Unit(100, UnitType.Percentage);
        }

我还添加了一些自定义属性:

    public int SelectedID
    {
        get
        {
            if (ViewState["SelectedID" + this.ID] == null)
                ViewState["SelectedID" + this.ID] = "-1";
            return Convert.ToInt32(ViewState["SelectedID" + this.ID]);
        }
        set
        {
            ViewState["SelectedID" + this.ID] = value;
        }
    }

* 问题 * :当我使用工具>在VS2010中生成本地资源时

使用此工具之前的aspx标记是这样的:

<RPC:GridView ID="grdData" runat="server" onrowcommand="grdData_RowCommand">

但是此工具会将任何公共属性或任何设置添加到我的aspx标记中,如下所示:

<RPC:GridView ID="grdData" runat="server" onrowcommand="grdData_RowCommand"                                                 
                                                meta:resourcekey="grdDataResource1" SelectedID="-1" Width="100%">

我不喜欢VS2010将我的设置(如宽度)和我的自定义属性(如SelectedID)添加到aspx标记,这使我无法更改自定义控件代码并反映包含此内容的所有aspx页面中的更改控制,例如

我将控件的宽度更改为50%,它不会反映到任何页面

请告诉我如何解决我的问题

非常感谢您的反馈

2 个答案:

答案 0 :(得分:1)

这是一个稍微复杂的话题,在一个答案中要说实话!您可以采取多种方法来解决此问题。这一切都取决于你的控件具有的属性类型,以及它是否是模板化控件。作为快速修复,请尝试使用以下属性修饰公共属性

 [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

或者如果您不希望用户能够通过HTML标记设置公共属性,那么使用

 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]

另一个有用的属性声明

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

PersistenceMode(PersistenceMode.Attribute)

答案 1 :(得分:0)

我发现在ctor中进行任何初始化会导致本地资源生成(甚至是腐败)的主要问题。在属性上使用DefaultValue属性和/或尽可能使用OnLoad。 (作为旁注使用CSS而不是显式设置控制宽度)。