gpt4 book ai didi

c# - ASPX - FindControl(string) 找到控件但不是它的值

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

我的 ASPX 页面有问题。基于列表框中的选择,网站(动态地)生成适当的控件。

稍后在 ButtonClick 事件中,我需要获取几个文本框的文本值。这就是问题所在,我的代码识别具有适当属性(如 ID)的文本框,但不是它们的 Text 值。

这是我使用的代码:

//This is part of the company framework and is merely to provide context. 
Dal.Customer newCus = new Dal.Customer();

//It recognizes the textboxes, but doesn't find the text inside it. (there is text in the textboxes)
TextBox txtCusName = (TextBox)Page.FindControl("ctl00$ContentPlaceHolder1$txtCusName");
TextBox txtCusCode = (TextBox)Page.FindControl("ctl00$ContentPlaceHolder1$txtCusCode");

newCus.DisplayName = txtCusName.Text;
newCus.CustomerCode = txtCusCode.Text;

我想知道我在这里做错了什么以及我遗漏了哪些步骤,或者是否有另一种(更好的)方法来获得我需要的东西。

提前致谢。

编辑

根据请求,这里是在从列表框中进行选择后“生成”(或者更准确地说是“写入”)页面上的适当控件的代码。

private void CreateCustomerTemplate(Control control)
{
PlaceHolder ph = new PlaceHolder();

TextBox txtCusName = new TextBox();
TextBox txtCusCode = new TextBox();

txtCusName.ClientIDMode = ClientIDMode.Static;
txtCusCode.ClientIDMode = ClientIDMode.Static;

txtCusName.ID = "txtCusName";
txtCusCode.ID = "txtCusCode";
ph.Controls.Add(new LiteralControl("<table><tr><td>" +
"Customer Name: </td><td>"));
ph.Controls.Add(txtCusName);
ph.Controls.Add(new LiteralControl("</td></tr><tr><td>" +
"Customer Code: </td><td>"));
ph.Controls.Add(txtCusCode);
ph.Controls.Add(new LiteralControl("</td></tr>"));

ph.Controls.Add(new LiteralControl("</table>"));

control.Controls.Add(ph);

}

这里是选择 ListBox 并最终调用适当控件的创建的代码。这发生在 SelectedIndexChanged 事件中(AutoPostBack=true)。

switch (ddlType.SelectedItem.Value)
{
case "null":
btnSend.Visible = false;
break;

case "Customer":
new Template(TemplateType.Customer, spantempcontent);
btnSend.Visible = true;
templateType = TemplateType.Customer;
break;
//The switch goes on
}

最佳答案

您正试图通过提供给 HTML 中控件的 ID 来查找元素,而您应该使用 asp.net ID。

所以改变

TextBox txtCusName = (TextBox)Page.FindControl("ctl00$ContentPlaceHolder1$txtCusName");

进入

TextBox txtCusName = (TextBox)Page.FindControl("txtCusName");

asp.net 将占位符、数据重复控件(GridView、Repeater)中的控件 ID 更改为此 ctl00$ContentPlaceHolder1$txtCusName 以确保在客户端不会有重复的 ID。

更新

您总是需要递归地查找控件。因此,如果您使用母版页,则需要先找到 ContentPlaceHolder。

ContentPlaceHolder cph = Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
TextBox tb = cph.FindControl("txtCusName") as TextBox;

TextBox是否像Panel一样位于另一个Control中,那么需要先找到Panel,再找到TextBox。

ContentPlaceHolder cph = Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
Panel p = cph.FindControl("Panel1") as Panel;
TextBox tb1 = p.FindControl("txtCusName") as TextBox;

关于c# - ASPX - FindControl(string) 找到控件但不是它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41955594/

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