2011-03-02 21 views
0

我已经创建了基于点网络控件的简单控件。例如,有一个简单的基于Grid网格控件的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%,它不反映任何网页

请告诉我,我应该怎么做才能解决我的问题

非常感谢您对您的反馈

回答

1

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

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 

,或者如果你不希望用户能够通过HTML标记在所有设置的公共财产,然后使用

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 

这将是有帮助的与

另一个属性声明[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

PersistenceMode(PersistenceMode.Attribute) 
+0

PS:您可能还想探索用适当的ParseChildren属性来装饰您的控件类 – Nikhil 2011-03-02 11:00:15

+0

非常感谢,它确实有效 – 2011-03-02 12:00:20

+0

非常感谢Nikhil – 2011-03-02 12:12:21

0

我发现在ctor中做任何初始化都会导致本地资源生成(甚至是腐败)的严重问题。如果可能的话,使用属性的DefaultValue属性和/或使用OnLoad。 (作为旁注使用CSS而不是明确设置控制宽度)。

相关问题