ASP.NET C#数据列表-在子数据列表中查找隐藏字段
我是ASP.NET新手。我整个上午都在试,但没能成功。在我的DataList1中,有一个子dataList(childList),它列出了公司名称和复选框。我还将CompanyID存储在隐藏字段(hiddenCompanyID)中 我喜欢做的是,当用户选中一个框(在子数据列表下)时,它将触发事件(chkChildCompany_CheckedChanged)并从隐藏字段捕获CompanyID,以便我可以处理数据库更新。我不知道如何在子数据列表中找到隐藏的字段控件 请帮忙, 谢谢ASP.NET C#数据列表-在子数据列表中查找隐藏字段,asp.net,Asp.net,我是ASP.NET新手。我整个上午都在试,但没能成功。在我的DataList1中,有一个子dataList(childList),它列出了公司名称和复选框。我还将CompanyID存储在隐藏字段(hiddenCompanyID)中 我喜欢做的是,当用户选中一个框(在子数据列表下)时,它将触发事件(chkChildCompany_CheckedChanged)并从隐藏字段捕获CompanyID,以便我可以处理数据库更新。我不知道如何在子数据列表中找到隐藏的字段控件 请帮忙, 谢谢 您可以使用Nam
您可以使用
NamigContainer
属性获取DataListItem
,然后使用FindControl
:
protected void chkChildCompany_CheckedChanged(object sender, EventArgs e)
{
var chk = (CheckBox) sender;
var item = (DataListItem) chk.NamingContainer;
var hiddenCompanyID = (HiddenField) item.FindControl("hiddenCompanyID");
// here you are ...
}
顺便说一句,这种技术适用于所有web数据绑定控件,如
Repeater
、GridView
等。使用NamingContainer
比使用Parent.Parent
或其他方法更安全。在您的情况下,您应该将公司ID存储在ViewState中,而不是隐藏字段:
ViewState["MicrosoftID"] = "4536";
稍后,您可以通过以下方式访问它:
protected void chkChildCompany_CheckedChanged(object sender, EventArgs e)
{
string companyID = ViewState["MicrosoftID"];
}
希望有帮助 有几种不同的方法来解决这个问题。我的第一反应是将发送者强制转换为适当的类型,然后检查.Parent属性。这可能允许您执行以下操作:
HiddenField hidden = (HiddenField) myCheckbox.Parent.FindControl("hiddenCompanyID");
如果那不起作用。。。另一个选项是嵌入回发引用,该引用已经包含相应的隐藏字段值,该值由复选框触发。或者稍微修改一下,这样就有了一个按钮,它接受commandargumentparam。在本例中,您只需将其设置为,然后在事件处理程序中即可使用。我将向您的复选框添加一个属性,然后从复选框本身获取所需的值
<asp:CheckBox id="chkChildCompany" runat="server" value="123Test"
AutoPostBack="true" CustomAttribute='<%#Eval("CompanyID") %>'
OnCheckedChanged="chkChildCompany_CheckedChanged" />
对不起,你能告诉我怎么做吗?这会在childData中的某个地方吗?谢谢你能给我看一下你在隐藏字段中存储公司ID的代码吗?迪莫在这里找错了。很明显,每个数据列表行的CompanyID都必须不同,否则为什么会有它。我的意思是在viewstate中存储每行的每个CompanyID。因此,如果您存储每行的每个CompanyID,您如何知道以后在代码中使用哪一个呢?如果可行,这是一个很好的建议。然而。。。我有点怀疑!你试过这个吗,安德烈?我不确定自定义属性是否会在回发过程中保持不变。我以前肯定使用过它,我记得这样做的警告是,您无法从某些ASP控件访问“Attributes”属性,但我认为使用复选框可以正常工作。此外,如果我没记错,只要您在aspx中声明该属性,而不是在代码后面,它被坚持,但我必须承认,我有点生疏了这个主题,现在你不受欢迎,如果有帮助的话,考虑一下投票的答案!我如何投票选择多个答案?
HiddenField hidden = (HiddenField) myCheckbox.Parent.FindControl("hiddenCompanyID");
<asp:CheckBox id="chkChildCompany" runat="server" value="123Test"
AutoPostBack="true" CustomAttribute='<%#Eval("CompanyID") %>'
OnCheckedChanged="chkChildCompany_CheckedChanged" />
var CompanyID = (sender as CheckBox).Attributes["CustomAttribute"]