我正在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。
答案 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)
看起来绑定需要一个属性。 name
,message
和colour
是字段。
你需要的是这样的:
public string name
{
get;
set;
}
public string message
{
get;
set;
}
public string colour
{
get;
set;
}