asp.net - 如何访问转发器中的 XML 子节点
问题描述
我试图弄清楚如何使用我的 asp.net Web 表单应用程序中的转发器访问序列化 xml 数据中的子节点。我可以访问第一层的所有 xml 元素数据,但不能访问第二层(好处)。
我的问题是我无法访问Item.Benefits.BenefitImage
或Item.Benefits.Benefit
在中继器内。
任何指针将不胜感激。
这是我的 xml 数据的片段:
<Category Key="acid" Rank="30">
<Intro> ... </Intro>
<Description> ... </Description>
<Benefits>
<Benefit Key="promote_texture">Promote smoother skin texture</Benefit>
<Benefit Key="promote_tone">Promote even skin tone</Benefit>
<Benefit Key="enhance_radiance">Enhance skin radiance</Benefit>
</Benefits>
</Category>
这是 .ASPX 页面中转发器的片段:
<asp:Panel runat="server" CssClass="benefits-wrapper">
<asp:Repeater ID="BenefitsList" runat="server" ItemType="OrdinarySite.Models.ProductCategory" SelectMethod="CategoryList_GetData">
<ItemTemplate>
<div class="benefits">
<div class="benefit">
<asp:Image runat="server" CssClass="benefit-img" ImageUrl="<%# Item.Benefits.BenefitImage %>" />
<asp:Label runat="server" CssClass="benefit-desc" Text="<%# Item.Benefits.Benefit %>"></asp:Label>
</div>
</div>
<div class="benefits-copy">
<asp:Label runat="server" CssClass="heading" Text="<%# Item.Name %>"></asp:Label>
<p><%# Item.Description %></p>
</div>
</ItemTemplate>
</asp:Repeater>
</asp:Panel>
这是 .ASPX.CS 页面中的转发器片段:
public partial class Category : BasePage
{
public string categoryKey;
protected void Page_Load(object sender, EventArgs e)
{
var key = (string)RouteData.Values["key"];
categoryKey = key;
if (categoryKey != null) {
this.Title = categoryKey;
} else {
Response.Redirect("~/", true);
}
}
public IEnumerable<ProductCategory> CategoryList_GetData() => CacheObject.Categories.Where(x => x.Key == categoryKey);
}
这是该课程的一个片段:
namespace Site.Models
{
[Serializable]
public class ProductCategory : IComparable<ProductCategory>
{
[XmlAttribute]
public string Key { get; set; }
[XmlAttribute]
public int Rank { get; set; }
[XmlAttribute]
public string Naming { get; set; }
[XmlIgnore]
public List<Product> Products { get; set; }
public string Name => Resources.ProductCategory.ResourceManager.GetString(Key);
public int CompareTo(ProductCategory other) => this.Rank - other.Rank;
public static string XmlFileName => HostingEnvironment.MapPath("~/App_Data/categories.xml");
public string Intro { get; set; }
public string Description { get; set; }
[XmlArray("Benefits"), XmlArrayItem("Benefit")]
public List<BenefitsList> Benefits { get; set; }
[Serializable]
public class BenefitsList
{
[XmlAttribute]
public string Key { get; set; }
[XmlElement]
public string Benefit { get; set; }
public string BenefitImage => $"~/Images/category/benefits/{Key}.svg";
}
public static List<ProductCategory> LoadXmlData( List<Product> products )
{
var cats = SerializerSupport.DeserializeList<ProductCategory>( XmlFileName );
foreach( var c in cats )
{
c.Products = products
.Where( x => x.Details != null && string.Equals( c.Key, x.Details.CategoryKey, StringComparison.OrdinalIgnoreCase ) )
.OrderBy(x => x.Details.Title).ToList();
c.Products.ForEach( x => x.Category = c );
}
cats.Sort();
return cats;
}
}
解决方案
您需要使用嵌套转发器Benefits
在转发器内显示如下。请参阅:嵌套中继器。
<asp:Panel runat="server" CssClass="benefits-wrapper">
<asp:Repeater ID="BenefitsList" runat="server" ItemType="OrdinarySite.Models.ProductCategory" SelectMethod="CategoryList_GetData">
<ItemTemplate>
<div class="benefits">
<asp:Repeater runat="server" DataSource='<%# Eval("Item.Benefits") %>'>
<div class="benefit">
<asp:Image runat="server" CssClass="benefit-img" ImageUrl="<%# BenefitImage %>" />
<asp:Label runat="server" CssClass="benefit-desc" Text="<%# Benefit %>"></asp:Label>
</div>
</asp:Repeater>
</div>
<div class="benefits-copy">
<asp:Label runat="server" CssClass="heading" Text="<%# Item.Name %>"></asp:Label>
<p><%# Item.Description %></p>
</div>
</ItemTemplate>
</asp:Repeater>
</asp:Panel>
推荐阅读
- apache - 同一域上两台不同机器上的两个网络服务器
- python - 噪声平均功率函数(APFN)的实现
- javascript - 创建具有相同键和值的新对象
- c - 如何将字符串存储在结构数组中?
- kubernetes - 具有与 Active Directory 集成的 Web gui 的 Kubernetes
- routes - 默认路线计算器是使用最短时间还是最短距离?
- ruby-on-rails - 修改 rails mongoid 查询中的值
- apache-kafka - 消费者没有收到订阅后创建的主题的消息
- python - 由于 SSL 错误,无法使用 pip 安装 python 库
- java - 如何使用 Java 从 JSON 文件中获取密钥计数?