...我正在尝试使用此代码向我的ASP控件动态添加或删除类(这是通过我的成对编程朋友(他被称为“ 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,所以请简单说明我如何投射控件或修改代码,以实现能够添加或删除的最终目标类,而不会丢失任何现有类。

非常感谢!罗斯

最佳答案

您使用的朋友课程错误。 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属性。希望能帮助到你!

关于c# - 如何将HtmlGenericControl转换为WebControl?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12089762/

10-13 03:03