如何在UserControl的CodeBehind文件中将SkinID设置为TextBox?

时间:2011-08-11 06:22:47

标签: c# asp.net user-controls textbox

我正在检查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."

如何解决这个问题?

1 个答案:

答案 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事件中执行其余逻辑。