...我正在尝试使用此代码向我的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/