C#在用户控件DataBind()中使用子类属性名称发出问题

时间:2013-08-15 04:58:40

标签: c# asp.net .net user-controls

我正在asp.net项目中创建自己的用户控件,并且在此控件中有两个asp列表元素,我想从另一个类的列表对象中设置数据源。

我的异常错误是:

DataBinding: 'TeamTracker.Flash.ErrorMessage' does not contain a property with the name 'message'.

用户控件如下所示:

public partial class flashMessage : System.Web.UI.UserControl
{
    protected void Page_PreRender (object sender, EventArgs e)
    {
        TTPage page = (TTPage)this.Page;
        WebFlash flash = page.flashMessages;
        messages.DataSource = flash.NoticeMessages;
        messages.DataTextField = "message";
        messages.DataValueField = "name";
        messages.DataBind();
        errorMessages.DataSource = flash.ErrorMessages;
        errorMessages.DataTextField = "message";
        errorMessages.DataValueField = "name";
        errorMessages.DataBind();
    }
}

ErrorMessage是下面的类:

namespace TeamTracker.Flash
{
    public class ErrorMessage : Message
    {
        public ErrorMessage(string message)
        {
            this.message = message;
        }
    }
}

message属性在父抽象类

中定义
 namespace TeamTracker.Flash
 {
     public abstract class Message
     {
         public string name, message, colour;
     }
 }

数据绑定是否有理由不能看到此属性“消息”? errorMessages绑定发生错误,因为它在列表中有两个对象,因为NoticeMessages有0。

2 个答案:

答案 0 :(得分:2)

您需要使用公共属性进行数据绑定,

public abstract class Message
{
    public string Name { get; set; }
    public string Message { get; set; }
    public string Colour { get; set; }
}

如果您无法将字段更改为属性,请执行以下操作。

errorMessages.DataSource = flash.ErrorMessages.Select(x=> 
                             new { Message = x.message, Name = x.name}).ToList();
errorMessages.DataTextField = "Message";
errorMessages.DataValueField = "Name";

答案 1 :(得分:1)

看起来绑定需要一个属性。 namemessagecolour是字段。 你需要的是这样的:

public string name
{
    get;
    set;
}
public string  message
{
    get;
    set;
}
public string colour
{
    get;
    set;
}