如何在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."

如何解决这个问题?

如何在UserControl's CodeBehind文件中设置SkinID为文本框

根据错误消息,我想说,您只需要将该代码移动到Page_PreInit事件。

然而,正如MSDN所说:"如果请求是回发,则控件的值尚未从视图状态恢复。如果在此阶段设置控件属性,则其值可能在下一个事件中被覆盖。"

您可能需要在如何处理这个问题上更有创造性-可能将用于确定会话中皮肤id的信息存储在会话中。如果您还不熟悉ASP,我建议您熟悉它。. NET页面生命周期。

这里有一个例子,可能对你有用,或者至少让你指向正确的方向:

protected void Page_PreInit(object sender, EventArgs e)
{
    if ((string)Session["D1Variable"] == "0")
    {
        txtMRVD1.SkinID = "txtreadonly";
    }
}

你可以在gridviewrowcommand事件中完成你的逻辑。