asp.ControlParamter控件id冲突

时间:2012-04-18 18:18:19

标签: asp.net

<asp:ControlParameter ControlID="ddListPlayerPointSystems" Name="profileid" PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="ddListCmty" Name="cmty" PropertyName="SelectedValue" />
            <asp:ControlParameter ControlID="ctl00$MainContent$TabContainer1$TabPanel1$FormView3$pointsTextBox" Name="InsertPts" PropertyName="Text" Type="Decimal" />

我无法理解为什么在第一个控制参数中我可以调用dropdownbox id而不是textboxes id是pointsTextBox。我正在使用带有多个面板的asp ajax选项卡容器的母版页。如果我取消“ctl00 $ MainContent $ TabContainer1 $ TabPanel1 $ FormView3 $”我得到一个控件未找到但我不知道为什么这适用于其他两个控制参数

修改 所以我找到了解决问题的方法。感谢@TheGeekYouNeed和@JamesJ,我理解为什么我需要特定文本框的更长路径名(drop不在tabcontainer之外,所以直接名称有效)。但我发现因为我通过'&lt;%#Bind(“name”,“{0:n}”)%&gt;'分配该文本框的值我只能使用asp:Parameter而不是ControlParameter,如下所示:

"<asp:Parameter Name="name" Type="String" />"

问题是我不太明白这一切是如何运作的。

1 个答案:

答案 0 :(得分:0)

pointsTextBox的ControlID不是服务器端的'ct100 $ MainContent $ TabContainer..etc ....

在后面的代码中设置COntrolID,因此您可以使用FindControl(“pointsTextBox”)来获取对文本框控件的引用。

您可以执行以下操作:

TextBox t = this.FindControl("pointsTextBox") as TextBox;
if(t != null)
{
    ddListPlayerPOintSystems.Add(new { COntrolID = t, Name = "InsertPts", PropertyName="Text", Type="Decimal"});
}

我还没有测试过,所以我并没有声称代码是完美的,但是你需要遵循的方法如下所示。