Skip to main content
 首页 » 编程设计

c#之如何将 HtmlGenericControl 转换为 WebControl

2024年02月20日41cmt

...我正在尝试使用这段代码动态地向我的 ASP 控件添加或删除类(这是我通过结对编程的好 friend 找到的,他将被称为“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”。

由于我的背景是 Ye Olde Pick BASIC,所以我在 C#、Visual Studio 等方面仍然相对缺乏经验,所以请简单说明我是如何转换我的控制权或修改代码以实现最终目标的在不丢失任何现有类的情况下添加或删除类。

非常感谢!罗斯

请您参考如下方法:

你错误地使用了你的 friend 类。 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 属性。希望对您有所帮助!