ASP.NET:动态生成的控件不会出现在代码隐藏中

时间:2009-06-07 10:49:00

标签: asp.net

我有一个asp.net页面。我正在从服务器(一个asp.net页面)生成一个RadioButton列表,并使用javascript和ajax将它加载到DIV。现在我想在我的codebhind文件中读取RadioButton列表。但VS Intelisense没有显示控件名称。谁能告诉我怎么读它?

我在服务器端生成单选按钮列表的代码

    System.IO.StringWriter swriter=new System.IO.StringWriter();
    HtmlTextWriter textWriter = new HtmlTextWriter(swriter);

    string strPriceOutput="";
    RadioButtonList iRadioBtnListPrices = new RadioButtonList();
    iRadioBtnListPrices.RepeatDirection = RepeatDirection.Vertical;
    iRadioBtnListPrices.CssClass = "priceList";
    string strRadios = "";
   if ((this.Vendor != null))
   {
        foreach (VendorQuoteType vendorQuoteType in Vendor.VendorQuoteTypeCollection)
        {        
            iRadioBtnListPrices.Items.Add(new ListItem(" $ " + totalPrice.ToString()" ,vendorID.ToString()));
        }

   }
   iRadioBtnListPrices.RenderControl(textWriter);
   strPriceOutput = swriter.ToString();

我正在使用ajax在我的javascript中阅读它并将其指定为div的内部HTML。

如何在Codebehind中阅读此RadioButton列表?

3 个答案:

答案 0 :(得分:1)

您可能需要找到.FindControl()并将其投放到RadioButtonList。如果你将它添加到Panel或其他控件的内容中,缩小你需要搜索它的位置(甚至可能<div id="myDiv" runat="server">就足够了,我不知道...)你然后可以使用这个:

RadioButtonList theList = 
    (RadioButtonList)thePanel.FindControl("theIdOfTheRadioButtonList");

theList.WillNowGiveYouIntellisense();

答案 1 :(得分:1)

改善代码的几种方法:

  • 在aspx中创建一个RadioButtonList控件,并在Page_Load
  • 中手动填充它

因此IntelliSense将找到控件名称

  • 将动态创建的RadioButtonList添加为现有控件的子级

  • 设置RadioButtonList的ID属性

  • 使用具有所选ID的FindControl

在这些解决方案中不需要调用RenderControl。

答案 2 :(得分:0)

首先,为什么使用这种奇怪的方法来渲染单选按钮列表?我想有更好的方法来实现你所需要的。举例来说,看一下RadioButtonList数据绑定机制:here。我会将radiobutton列表添加到页面中,并使用数据绑定机制或在循环中执行此操作。然后我会根据某些条件隐藏/显示(myRadioButtonList.Visible = false / true)列表。

你可能在代码隐藏上看不到你的radiobutton列表的原因是你在运行时动态创建它。 intellisense将向您显示您在aspx / ascx代码上放置的元素,并且设计器已在设计器文件中创建了适用于您的页面/用户控件的变量。 它应该如何能够检索它?