gpt4 book ai didi

c# - 使用 XmlDataSource 时如何在嵌套的 ListView 上设置 ClientIDRowSuffix?

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:27 25 4
gpt4 key购买 nike

我有一个 XmlDataSouce与电影和 Actor 。我想列出每部电影的指定 Actor 。我正在使用 ListViewClientIDMode="Predictable" 控制和一个 ClientIDRowSuffix以确保我最终得到可以在我的 javascript 中使用的 ID。

我有以下 XmlDataSource :

<asp:XmlDataSource ID="XmlDataSource1" runat="server">
<Data>
<Movies>
<Movie Name="What Dreams May Come" Ranking="7" MovieId="6546" >
<Actor FullName="Robin Williams" ActorId="1573" />
<Actor FullName="Cuba Gooding" ActorId="1957" />
</Movie>
<Movie Name="A Beautiful Mind" Ranking="10" MovieId="5151" >
<Actor FullName="Russell Crowe" ActorId="1231" />
<Actor FullName="Ed Harris " ActorId="1923" />
</Movie>
</Movies>
</Data>
</asp:XmlDataSource>

现在我想查看它:

<asp:ListView ID="ListView1" runat="server" ClientIDMode="Predictable"
ClientIDRowSuffix="MovieId" DataSourceID="XmlDataSource1">
<ItemTemplate>
<div id="item" runat="server" clientidmode="Predictable">
Name: <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>' /><br />
Actors:
<asp:ListView ID="Actors" runat="server"
ClientIDMode="Predictable" ClientIDRowSuffix="ActorId"
DataSource='<%# XPathSelect("Actor") %>' />
<ItemTemplate>
<asp:Label ID="lblActorName" runat="server"
Text='<%# XPath("@FullName") %>' />
</ItemTemplate>
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
<ItemSeparatorTemplate>,</ItemSeparatorTemplate>
</asp:ListView>
<br /><br />
</div>
</ItemTemplate>
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
</asp:ListView>

它看起来不错,但它抛出以下异常:

DataBinding: 'System.Xml.XmlElement' does not contain a property with the name 'ActorId'.

如何设置正确的ClientIDRowSuffix ?

非常感谢评论。

附言。我用过 <%# Eval() %>但是那个绑定(bind)到电影记录。

最佳答案

我有一个答案,但您不会喜欢它,因为它涉及一段自定义代码。 ClientIdRowSuffix 似乎需要一个属性,所以我创建了自己的方法。该方法需要节点集和id属性的名称。

<script runat="server">

public IEnumerable EvalIDNode(IEnumerable element, string idAttribute)
{
foreach (System.Xml.XmlElement node in element)
{
yield return new CustomNode(node, idAttribute);
}
}

public class CustomNode : System.Xml.XPath.IXPathNavigable
{
private System.Xml.XmlElement _node;

public string IDField { get; private set; }

public CustomNode(System.Xml.XmlElement node, string idAttribute)
{
_node = node;
IDField = node.Attributes[idAttribute].Value;
}

public System.Xml.XPath.XPathNavigator CreateNavigator()
{
return _node.CreateNavigator();
}
}

</script>

我们将使用该方法获取 ListField 上的数据源:

<asp:ListView
ID="Actors"
runat="server"
ClientIDMode="Predictable"
ClientIDRowSuffix="IDField"
DataSource='<%# EvalIDNode(XPathSelect("Actor"), "ActorId") %>'>

请注意 ClientIdRowSuffix 已设置为 IDField。它不漂亮,但它完成了工作。如果您使用文本框和双向绑定(bind),我不确定绑定(bind)是否顺利。

关于c# - 使用 XmlDataSource 时如何在嵌套的 ListView 上设置 ClientIDRowSuffix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com