我创建了基于点网控制的简单控件。例如,有一个基于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%,它不会反映到任何页面
请告诉我如何解决我的问题
非常感谢您的反馈
答案 0 :(得分:1)
这是一个稍微复杂的话题,在一个答案中要说实话!您可以采取多种方法来解决此问题。这一切都取决于你的控件具有的属性类型,以及它是否是模板化控件。作为快速修复,请尝试使用以下属性修饰公共属性
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
或者如果您不希望用户能够通过HTML标记设置公共属性,那么使用
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
另一个有用的属性声明
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
是
PersistenceMode(PersistenceMode.Attribute)
答案 1 :(得分:0)
我发现在ctor中进行任何初始化会导致本地资源生成(甚至是腐败)的主要问题。在属性上使用DefaultValue属性和/或尽可能使用OnLoad。 (作为旁注使用CSS而不是显式设置控制宽度)。