【发布时间】:2017-06-16 18:32:17
【问题描述】:
我的 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
}
【问题讨论】:
-
试试
txtCusName.Value.ToString()。 -
“找不到里面的文字” 表示
txtCusName.Text返回""?我怀疑您重新创建文本框为时已晚。在Page_Init做吧 -
txtCusName.Value 在这里不可用,因为文本框是一个 ASPX 控件。如果它是一个 HTML 控件,这将起作用。但是感谢您的尝试。 @AshishSrivastava
-
没错,它返回
"",它返回一个空字符串,而控件内有明显的文本。 @TimSchmelter -
@TimSchmelter 在这里最有可能走在正确的轨道上。如果控件是动态添加的,则需要在
HttpApplication.AcquireRequestState事件触发之前在回发中重新添加。这意味着它们应该在(例如)Page_Init事件中创建...为了在此处提供帮助,我们需要了解您如何添加和重新添加这些控件。