C#newbie ask,所以如果问题很愚蠢或答案非常明显,可能是因为我不完全理解XmlDataSource
的工作原理。
给定以下XML文件“super-simple-xml.xml”(格式化以节省一些空间),
<items>
<item> <one id="ms">Microsoft</one> <two>MSFT</two> </item>
<item> <one id="in">Intel</one> <two>INTC</two> </item>
<item> <one id="de">Dell</one> <two>DELL</two> </item>
</items>
看起来像这样的转发器,
<asp:Repeater id="SuperSimple" runat="server" OnItemCommand="SuperSimple_ItemDataBound">
<HeaderTemplate>
<table border="1"><tr><th>Company</th><th>Symbol</th><th>Wrong</th></tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label Text=<%#XPath("one") %> runat="server" /></td>
<td><asp:CheckBox Text=<%#XPath("two") %> runat="server" id="symbol" /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
<asp:Button id="buttonOne" Text="Submit!" runat="server" />
</FooterTemplate>
</asp:Repeater>
以及以下绑定XML:
private void Page_Load(object sender, EventArgs e)
{
XmlDataSource xmlSource = new XmlDataSource();
xmlSource.DataFile = "super-simple-xml.xml";
xmlSource.XPath = "items/item";
if (!IsPostBack) // Did this to prevent an error
{
SuperSimple.DataSource = xmlSource;
SuperSimple.DataBind();
}
}
我如何将每个XML条目中的id
拉入类或变量?
这里的想法是我在Repeater中显示项目。我添加了复选框,因此我可以检查任何<two>
条目,然后按提交。当它回发时,我想将检查的条目存储在我已经制作的类中。获取<one>
和<two>
很容易,因为他们在Repeater中有ID我可以参考。但是从不调用XML中的id
属性,因此我不知道如何实现它。我希望在我传递数据时让类中的id
引用。这可能吗,我该怎么办?
答案 0 :(得分:1)
使用XPath @语法获取属性:
<%# XPath("one/@id") %>
您可以将此表达式绑定到HiddenField并在回发中访问它:
<asp:HiddenField runat="server" ID="hidID" Value='<%# XPath("one/@id") %>' />
向<ItemTemplate>
添加命令按钮:
<asp:Button runat="server" ID="btnGetID" Text="Get ID" CommandName="GetID" />
在OnItemCommand事件中:
protected void SuperSimple_ItemDataBound(object sender, RepeaterCommandEventArgs e)
{
//check the item type, headers won't contain the control
if (e.CommandName == "GetID")
{
//find the control and put it's value into a variable
HiddenField hidID = (HiddenField)e.Item.FindControl("hidID");
string strID = hidID.Value;
}
}
这是另一种选择(我最初发布的是因为我对OnItemCommand事件的名称感到困惑,并认为你想要DataBinding时的值):
在<ItemTemplate>
:
<asp:Button runat="server" ID="btnGetID" OnClick="btnGetID_Click" Text="Get ID" />
代码隐藏:
protected void btnGetID_Click(object sender, e as EventArgs)
{
//sender is the button
Button btnGetID = (Button)sender;
//the button's parent control is the RepeaterItem
RepeaterItem theItem = (RepeaterItem)sender.Parent;
//find the hidden field in the RepeaterItem
HiddenField hidID = (HiddenField)theItem.FindControl("hidID");
//assign to variable
string strID = hidID.Value;
}
答案 1 :(得分:0)
也许这会有所帮助,问题可能出在错误的xml结构中。
http://forums.asp.net/t/1813664.aspx/1?getting+xml+node+id+number