是否可以从数据绑定项中检索属性名称?

时间:2021-05-24 15:52:43

I have this code-behind that checks each item in a repeater when it is databound to see if the author/date are empty (either no author/date, or the system is set to not display them) so that way I can clear out their respective labels. This is so I dont get something like "Posted By on" when there is not author and/or date specified.

我有这个代码隐藏,它检查转发器中的每个项目,当它是数据绑定,以查看作者/日期是否为空(没有作者/日期,或系统设置为不显示它们),这样我就可以清除他们各自的标签。这样,当没有指定作者和/或日期时,我不会得到类似“发布者”的内容。

Here is the code:

这是代码:

protected void Page_Load(object sender, EventArgs e)
{
    repeater.ItemDataBound += new RepeaterItemEventHandler(repeater_ItemDataBound);    
}

void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Literal PostedBy = (Literal)e.Item.FindControl("litPostedBy");
        Literal PostedOn = (Literal)e.Item.FindControl("litPostedOn");
        string Author = (string)DataBinder.Eval(e.Item.DataItem, "Author");
        string Date = (string)DataBinder.Eval(e.Item.DataItem, "PubDate");

        if (string.IsNullOrEmpty(Author))
        {
            if (string.IsNullOrEmpty(Date))
            {
                PostedBy.Text = "";
                PostedOn.Text = "";
            }
            else
            {
                PostedBy.Text = "Posted ";
            }

        }
    }
}

I am using a CMS, and I am unsure of what all the properties are in the e.Item.DataItem. Is there some way I can loop through the DataItem and print out the property names/values?

我正在使用CMS,我不确定e.Item.DataItem中的所有属性。有没有什么方法可以遍历DataItem并打印出属性名称/值?

Thanks!

1 个解决方案

#1


What properties DataItem will have depends on what kind of object it contains. It will contain the object from the data source that is currently being processed when databinding the repeater. The following method takes any object and lists the properties it contains:

DataItem将具有哪些属性取决于它包含的对象类型。当数据绑定转发器时,它将包含当前正在处理的数据源中的对象。以下方法接受任何对象并列出它包含的属性:

private static void PrintAllProperties(object obj)
{
    obj.GetType().
        GetProperties().
        ToList().
        ForEach(p => 
            Console.WriteLine("{0} [{1}]", p.Name, p.PropertyType.ToString()
            ));
}

Example output (for a String instance):

示例输出(对于String实例):

Chars [System.Char]
Length [System.Int32]

#1


What properties DataItem will have depends on what kind of object it contains. It will contain the object from the data source that is currently being processed when databinding the repeater. The following method takes any object and lists the properties it contains:

DataItem将具有哪些属性取决于它包含的对象类型。当数据绑定转发器时,它将包含当前正在处理的数据源中的对象。以下方法接受任何对象并列出它包含的属性:

private static void PrintAllProperties(object obj)
{
    obj.GetType().
        GetProperties().
        ToList().
        ForEach(p => 
            Console.WriteLine("{0} [{1}]", p.Name, p.PropertyType.ToString()
            ));
}

Example output (for a String instance):

示例输出(对于String实例):

Chars [System.Char]
Length [System.Int32]