我的代码中有一个属性,它在作为转发器的usercontrol中发回信息。 rptOwners是我正在使用的转发器。转发器内的信息必须手动解析为xml,并通过代码中的属性发回。问题是我似乎无法访问转发器内控件的值。
调试时,我能看到rptOwners.DataSource中有2个项目,rptOwners.Items.Count = 2.我可以在监视窗口看到我想要的信息在那里但是我无法访问它。
我一直在尝试使用rptOwners.DataSource [0] .Name等,但它说“无法将索引应用于对象类型的表达式。
public string xmlString
{
get
{
var _builder = new StringBuilder();
var rpt = rptOwners.DataSource;
IList<string> ownersRepeater = new List<string>();
foreach (var item in rpt )
{
_builder.Append("<Owners>");
_builder.Append("<Owner>");
_builder.Append(String.Format("<item>{0}</item>", name));
_builder.Append(String.Format("<item>{0}</item>", address));
_builder.Append(String.Format("<item>{0}</item>", age));
_builder.Append("</Owner>");
_builder.Append("</Owners>");
}
return _builder.ToString();
}
感谢您的帮助。如果这还不够明确,请告诉我。
以下是我的意思......
以下是答案:
foreach (RepeaterItem item in rptOwners.Items)
{
var lblOwnerName = (Label)item.FindControl("lblOwnerName");
_builder.Append("<Owners>");
_builder.Append("<Owner>");
_builder.Append(String.Format("<item>{0}</item>", lblOwnerName));
_builder.Append(String.Format("<item>{0}</item>", item));
_builder.Append(String.Format("<item>{0}</item>", item));
_builder.Append(String.Format("<item>{0}</item>", item));
_builder.Append(String.Format("<item>{0}</item>", item));
_builder.Append(String.Format("<item>{0}</item>", item));
_builder.Append(String.Format("<item>{0}</item>", item));
_builder.Append("</Owner>");
_builder.Append("</Owners>");
}
return _builder.ToString();
答案 0 :(得分:1)
试试这个(我只添加了一个演员):
public string xmlString
{
get
{
var _builder = new StringBuilder();
var rpt = (IList<Owner>) rptOwners.DataSource; //ADDED A CAST
IList<string> ownersRepeater = new List<string>();
foreach (var item in rpt )
{
_builder.Append("<Owners>");
_builder.Append("<Owner>");
_builder.Append(String.Format("<item>{0}</item>", name));
_builder.Append(String.Format("<item>{0}</item>", address));
_builder.Append(String.Format("<item>{0}</item>", age));
_builder.Append("</Owner>");
_builder.Append("</Owners>");
}
return _builder.ToString();
}
答案 1 :(得分:0)
我不知道您的DataSource属性是如何实现的,但是根据您的描述似乎正在改变
var rpt = rptOwners.DataSource;
行到
var rpt = rptOwners.Items;
应该有用。
答案 2 :(得分:0)
我建议你不要在任何地方使用'var'。如果不清楚表达正确部分的类型是什么,最好显示确切的类型。
您不能仅因为Repeater.DataSource属性类型为System.Object而应用索引器。你必须将其转换为适当的一个才能访问索引器(List?)。