C# 如何引用非';t绑定到中继器
C#新手提问,所以如果问题很愚蠢或者答案很明显,可能是因为我不完全理解C# 如何引用非';t绑定到中继器,c#,asp.net,xml,data-binding,asp.net-2.0,C#,Asp.net,Xml,Data Binding,Asp.net 2.0,C#新手提问,所以如果问题很愚蠢或者答案很明显,可能是因为我不完全理解XmlDataSource的工作原理 给定以下XML文件“super-simple XML.XML”(格式化以节省一些空间) 如何将id从每个XML条目拉入类或变量 这里的想法是我在一个中继器中显示项目。我添加了复选框,因此我可以选中任何条目,然后按Submit。当它发回时,我想将选中的条目存储在我创建的类中。获取和非常简单,因为它们在中继器中有ID,我可以参考。但是XML中的id属性从未被调用,所以我不知道如何访问它。当我传
XmlDataSource
的工作原理
给定以下XML文件“super-simple XML.XML”(格式化以节省一些空间)
如何将id
从每个XML条目拉入类或变量
这里的想法是我在一个中继器中显示项目。我添加了复选框,因此我可以选中任何
条目,然后按Submit。当它发回时,我想将选中的条目存储在我创建的类中。获取
和
非常简单,因为它们在中继器中有ID,我可以参考。但是XML中的id
属性从未被调用,所以我不知道如何访问它。当我传递数据时,我想在类中引用id
。这可能吗?我该怎么做 也许这有帮助,问题可能出在错误的xml结构中
使用XPath@语法获取属性:
<%# XPath("one/@id") %>
这是另一种选择(我最初发布的原因是我对您的OnItemCommand事件的名称感到困惑,并认为您需要在数据绑定时使用这些值):
在您的
中:
<asp:Button runat="server" ID="btnGetID" Text="Get ID" CommandName="GetID" />
<asp:Button runat="server" ID="btnGetID" OnClick="btnGetID_Click" Text="Get ID" />
为了澄清您的问题,您是在尝试在“Page_Load”C#方法中提取id属性的值,还是在尝试在标记中提取id值,例如,就像您在使用“一”和“二”一样?但是,最终任何方法都有效@肖恩谈到了后一种情况,这似乎是可行的。我只是假设,如果页面正在访问XML文件,我就可以访问它,而不必将它绑定到其他东西。
<%# XPath("one/@id") %>
<asp:HiddenField runat="server" ID="hidID" Value='<%# XPath("one/@id") %>' />
<asp:Button runat="server" ID="btnGetID" Text="Get ID" CommandName="GetID" />
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;
}
}
<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;
}