我正在检查GridView_RowCommand事件中的某些条件。基于条件我想设置SkinID或删除TextBox的SkinID。
这是我的代码:
if (dt.Rows[0]["D1Variable"].ToString() == "0")
{
txtMRVD1.Text = dt.Rows[0]["D1"].ToString();
txtMRVD1.ReadOnly = true;
txtMRVD1.SkinID = "txtreadonly";
}
else
{
txtMRVD1.Text = "";
txtMRVD1.ReadOnly = false;
}
但它会引发以下错误。
"The 'SkinId' property can only be set in or before the Page_PreInit event for static controls. For dynamic controls, set the property before adding it to the Controls collection."
如何解决这个问题?
答案 0 :(得分:2)
我会说,根据错误消息,您只需将该代码移至Page_PreInit
事件。
但是,正如MSDN所说:“如果请求是回发,则控件的值尚未从视图状态恢复。如果在此阶段设置控件属性,则其值可能会在下一个事件中被覆盖。“
您可能需要在如何处理此问题时获得更多创意 - 可能会在Session中存储用于确定外观ID的信息。我建议使用ASP.NET Page Life Cycle熟悉(如果您还没有)。
以下是可能为您工作的示例,或者至少让您指向正确的方向:
protected void Page_PreInit(object sender, EventArgs e)
{
if ((string)Session["D1Variable"] == "0")
{
txtMRVD1.SkinID = "txtreadonly";
}
}
然后,您可以在GridView RowCommand事件中执行其余逻辑。