没有扩展方法属性如何解决它

时间:2015-10-19 19:18:01

标签: c# extension-methods

当我使用

protected void GenGridView()
    {
        var data = project.ObtainDataDescJSON();
        Title = "show";
        for (int rowCtr = 0; row < data.Num.Count; row++)
        {
            var buttonField = new ButtonField
            {
                ButtonType = ButtonType.Button,
                Text = "Show",
                CommandName = "Display"

            };

            buttonField.Attributes.Add("data-toggle", "modal");
            buttonField.Attributes.Add("data-target", "#myModal");
            buttonField.CssClass = "btn btn-info";             

            ModelNumFieldsGrid.Columns.Add(buttonField);
            break;
        }
      }

在C#中定义按钮我得到错误说没有扩展属性而且没有扩展名cssClass。

我试过

[AttributeUsageAttribute(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
public sealed class ExtensionAttribute : Attribute 

using System.Runtime.CompilerServices.ExtensionAttribute;

但不起作用。我该怎么解决呢?

我的确切错误

Error	2	'System.Web.UI.WebControls.ButtonField' does not contain a definition for 'Attributes' and no extension method 'Attributes' accepting a first argument of type 'System.Web.UI.WebControls.ButtonField' could be found (are you missing a using directive or an assembly reference?)	C:\Users\s0\Documents\Visual Studio 2013\WebSites\Model.aspx.cs	55	25	Pred

Error	7	'System.Web.UI.WebControls.ButtonField' does not contain a definition for 'CssClass' and no extension method 'CssClass' accepting a first argument of type 'System.Web.UI.WebControls.ButtonField' could be found (are you missing a using directive or an assembly reference?)	C:\Users\s06\Documents\Visual Studio 2013\WebSites\Model.aspx.cs	74	25	Pred

2 个答案:

答案 0 :(得分:0)

C#中的扩展方法允许您声明可以调用的方法,就像它们是类的方法一样:

public class Button { } 

public static class ButtonExtensions 
{
    public static int GetArea(this Button button)
    {
        return button.Width * button.Height;
    }
}

使用此扩展方法,您可以调用:

Button b = new Button();
int area = b.GetArea();

删除扩展方法后,会出现错误消息

  

&#39;按钮&#39;不包含GetArea的定义,也没有可以找到接受类型GetArea的第一个参数的扩展方法Button

现在可能从来没有一个扩展方法AttributesCssClass,但是编译器猜测它曾经存在过一次,可能是因为大多数程序员都胜出了当IntelliSense没有获取成员名称时尝试编译。

简而言之:编译器告诉您ButtonField没有这些成员。

答案 1 :(得分:0)

确实System.Web.UI.WebControls.ButtonField不包含名为CssClass的属性,您可以通过以下方式设置类:

buttonField.ControlStyle.CssClass

此外,如果您需要向ButtonField添加自定义属性,则需要在网格的事件RowDataBound中执行此操作。