如何在UserControl's CodeBehind文件中设置SkinID为文本框
本文关键字:设置 文件 SkinID 文本 CodeBehind UserControl | 更新日期: 2023-09-27 18:05:04
我正在检查GridView_RowCommand事件中的一些条件。根据条件,我想为文本框设置SkinID或删除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."
如何解决这个问题?
根据错误消息,我想说,您只需要将该代码移动到Page_PreInit
事件。
然而,正如MSDN所说:"如果请求是回发,则控件的值尚未从视图状态恢复。如果在此阶段设置控件属性,则其值可能在下一个事件中被覆盖。"
您可能需要在如何处理这个问题上更有创造性-可能将用于确定会话中皮肤id的信息存储在会话中。如果您还不熟悉ASP,我建议您熟悉它。. NET页面生命周期。
这里有一个例子,可能对你有用,或者至少让你指向正确的方向:
protected void Page_PreInit(object sender, EventArgs e)
{
if ((string)Session["D1Variable"] == "0")
{
txtMRVD1.SkinID = "txtreadonly";
}
}
你可以在gridviewrowcommand事件中完成你的逻辑。