1

...我正在尝试使用此代码向我的 ASP 控件动态添加或删除类(我通过我的伟大结对编程朋友找到的,他被称为“Mr G”)

public static class WebHelper
{
    public static void AddCssClass(this WebControl control, string cssClass) {
        List<string> classes;
        if (!string.IsNullOrWhiteSpace(control.CssClass)) 
        {
            classes = control.CssClass.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            if (!classes.Contains(cssClass))
                classes.Add(cssClass);
        }
        else
        {
            classes = new List<string> { cssClass };
        }
        control.CssClass = string.Join(" ", classes.ToArray());
    }

    public static void RemoveCssClass(this WebControl control, string cssClass)
    {
        List<string> classes = new List<string>();
        if (!string.IsNullOrWhiteSpace(control.CssClass))
        {
            classes = control.CssClass.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
        }
        classes.Remove(cssClass);
        control.CssClass = string.Join(" ", classes.ToArray());
    }
}

不幸的是,我找不到将我的 HtmlGenericControls 传递给他们的方法......我已经尝试了显而易见的方法:

WebControl test1 = (WebControl)Page.FindControl("divcontent");
WebHelper.AddCssClass(test1, centredClass);

但我得到:System.InvalidCastException:无法将“System.Web.UI.HtmlControls.HtmlGenericControl”类型的对象转换为“System.Web.UI.WebControls.WebControl”。

我在 C#、Visual Studio 等方面仍然相对缺乏经验,因为我的背景是 Ye Olde Pick BASIC,所以请简单解释一下我是如何进行控制或修改代码以实现能够添加或删除的最终目标类而不丢失任何现有的类。

非常感谢!罗斯

4

2 回答 2

5

你用错了朋友类。WebHelper 中的方法是扩展方法,因此它应该如下所示:

WebControl test1 = (WebControl)Page.FindControl("divcontent");
test1.AddCssClass("something");

(已验证它有效)。确保您的控件派生自WebControl并且已runat="server"设置。

编辑:修改 WebHelper 以支持 HtmlControls

public static class WebHelper
{
    public static void AddCssClass(this HtmlControl control, string cssClass)
    {
        List<string> classes;
        if (!string.IsNullOrWhiteSpace(control.Attributes["class"]))
        {
            classes = control.Attributes["class"].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            if (!classes.Contains(cssClass))
                classes.Add(cssClass);
        }
        else
        {
            classes = new List<string> { cssClass };
        }
        control.Attributes["class"] = string.Join(" ", classes.ToArray());
    }

    public static void RemoveCssClass(this HtmlControl control, string cssClass)
    {
        List<string> classes = new List<string>();
        if (!string.IsNullOrWhiteSpace(control.Attributes["class"]))
        {
            classes = control.Attributes["class"].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
        }
        classes.Remove(cssClass);
        control.Attributes["class"] = string.Join(" ", classes.ToArray());
    }

    public static void AddCssClass(this WebControl control, string cssClass)
    {
        List<string> classes;
        if (!string.IsNullOrWhiteSpace(control.CssClass))
        {
            classes = control.CssClass.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
            if (!classes.Contains(cssClass))
                classes.Add(cssClass);
        }
        else
        {
            classes = new List<string> { cssClass };
        }
        control.CssClass = string.Join(" ", classes.ToArray());
    }

    public static void RemoveCssClass(this WebControl control, string cssClass)
    {
        List<string> classes = new List<string>();
        if (!string.IsNullOrWhiteSpace(control.CssClass))
        {
            classes = control.CssClass.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
        }
        classes.Remove(cssClass);
        control.CssClass = string.Join(" ", classes.ToArray());
    }
}

随意根据需要修改代码。一切都保持不变,只是为 HtmlControl 添加了扩展方法,因为如果要修改 HtmlControl 的类,则需要使用control.Attributes["class"],因为没有CssClass属性。希望能帮助到你!

于 2012-08-23T10:47:51.143 回答
0

使用asp:Panel控制divcontent代替div runat="server"

于 2012-08-23T11:18:53.450 回答