Asp.net 从aspx页面获取属性

Asp.net 从aspx页面获取属性,asp.net,detailsview,Asp.net,Detailsview,我有一个包含详细视图的aspx页面。 此detailsview包含一个或多个模板化字段。 我需要的是一个附加属性(或元数据信息)来确定绑定的数据字段 像这样的东西会很好(简化): ... 是否可以获取属性“DataField”? 否则,我将子类化TemplateField并添加一个属性:)我已经有一段时间没有这样做了,但我似乎记得如果您向TemplateField类添加一个公共的set/get“DataField”属性,ASP.NET应该使用您在属性中传递的值自动初始化它。我认为Templa

我有一个包含详细视图的aspx页面。 此detailsview包含一个或多个模板化字段。 我需要的是一个附加属性(或元数据信息)来确定绑定的数据字段

像这样的东西会很好(简化):


...
是否可以获取属性“DataField”?
否则,我将子类化TemplateField并添加一个属性:)

我已经有一段时间没有这样做了,但我似乎记得如果您向TemplateField类添加一个公共的set/get“DataField”属性,ASP.NET应该使用您在属性中传递的值自动初始化它。

我认为TemplateField的子类化可以完成这项工作:

[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
[DefaultProperty("DataField")]
public class DataTemplateField : TemplateField
{
    private String _dataField;


    public String DataField
    {
        get {
            return _dataField;
        }

        set {
            _dataField = value;
        }
    }
}
现在你可以像这样详细地使用这个字段

<Fields>
    <dvt:DataTemplateField HeaderText="Feld1" DataField="DIS">
        <ItemTemplate>
            <asp:Button runat="server" Text="Button" />
        </ItemTemplate>
    </dvt:DataTemplateField>
</Fields>

在您的情况下,子类化无法完成这项工作。您所做的是为属性“DataField”指定一个字符串值。这不会绑定值。我需要知道哪个字段由templatefield表示。某些字段对于特定用户是只读的,因此需要禁用这些字段。您希望实现什么?为什么您需要一些额外的数据?您是否查看了DetailsView上的可用事件?是否有合适的事件?扩展TemplateField,似乎是最干净的方法
<Fields>
    <dvt:DataTemplateField HeaderText="Feld1" DataField="DIS">
        <ItemTemplate>
            <asp:Button runat="server" Text="Button" />
        </ItemTemplate>
    </dvt:DataTemplateField>
</Fields>
protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    foreach(DetailsViewRow row in DetailsView1.Rows)
    {
        DataControlFieldCell cell = (DataControlFieldCell)row.Cells[1];
        if (cell.ContainingField is DataTemplateField)
        {
            var field = (DataTemplateField)cell.ContainingField;
            cell.Enabled = !field.DataField.Equals(fieldToDisable);
        }
    }            
}