Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码隐藏中查找用转发器创建的标记中的控件值_C#_Asp.net_Html_User Controls - Fatal编程技术网

C# 从代码隐藏中查找用转发器创建的标记中的控件值

C# 从代码隐藏中查找用转发器创建的标记中的控件值,c#,asp.net,html,user-controls,C#,Asp.net,Html,User Controls,我想我可能在应该使用其他东西的时候使用了一个转发器,所以我准备把它记在设计上,但我想在更改之前与开发社区核实一下 我还应该预先说明,我正在aspx页面的自定义用户控件中使用这个转发器控件 我的情况是,当用户选择一个项目时,我必须动态显示附加部件的列表。这类似于在线结账时有时会看到的“您可能也感兴趣”列表 因此,用户可以从下拉列表中选择要订购的项目,并且可以选择添加多达4个附加部分 目前,我将在数据对象的通用列表中返回可选部件列表,并将其绑定到repeater控件及其文本框。文本框基本上在一个框中

我想我可能在应该使用其他东西的时候使用了一个转发器,所以我准备把它记在设计上,但我想在更改之前与开发社区核实一下

我还应该预先说明,我正在aspx页面的自定义用户控件中使用这个转发器控件

我的情况是,当用户选择一个项目时,我必须动态显示附加部件的列表。这类似于在线结账时有时会看到的“您可能也感兴趣”列表

因此,用户可以从下拉列表中选择要订购的项目,并且可以选择添加多达4个附加部分

目前,我将在数据对象的通用列表中返回可选部件列表,并将其绑定到repeater控件及其文本框。文本框基本上在一个框中列出一个零件描述,并提供一个选项供用户在另一个文本框中键入所需数量

这一切都很好

因此,要明确的是,在repeater控件加载所有内容并呈现表单之后,用户可以在quantity文本框中键入值

因为这都在用户控件中,所以我正在编写一个方法来收集所有这些信息,填充业务对象并将其返回给调用它的任何对象

我很难找到自动生成的文本框,以便检索它们的值

我暗自怀疑我在设计中做了一些明显错误的事情。所以我想用蜂巢思维来运行这个程序,看看其他人是怎么想的:)

这是由repeater控件生成的标记

<div class="base-container-controls-75pct">         
  <div class="base-container-controls-98pct">
    <div class="base-container-controls-75pct">
       <input name="DownLoadItem1$UxAdditionalParts$ctl01$UxItemNumber" type="text" id="DownLoadItem1_UxAdditionalParts_ctl01_UxItemNumber" class="textbox-readonly-xl" />
    </div>
    <div class="base-container-controls-10pct">
        <input name="DownLoadItem1$UxAdditionalParts$ctl01$UxQuantity" type="text" value="3" id="DownLoadItem1_UxAdditionalParts_ctl01_UxQuantity" class="textbox-md" />
    </div>  
  </div>

  ... more repeating code here, basically the 98pct div above is repeated for each "row" ...

</div>

... 这里有更多的重复代码,基本上上面的98pct div对每个“行”都是重复的。。。

我在把一些东西拼凑在一起,阅读了其他各种帖子之后,基本上就明白了这一点

我缺少的是,我需要将[EnableViewState=“True”]添加到中继器的标记中。因此,我的标记如下:

<asp:Repeater ID="UxAdditionalParts" runat="server" OnItemDataBound="UxAdditionalPartsItemDataBound" EnableViewState="True">
    <HeaderTemplate>
    </HeaderTemplate>
    <ItemTemplate>
    <div class="base-container-controls-98pct">
        <div class="base-container-controls-75pct">
            <asp:TextBox ID="UxItemNumber" runat="server" CssClass="textbox-readonly-xl"></asp:TextBox>
        </div>
        <div class="base-container-controls-10pct">
                <asp:TextBox ID="UxQuantity" runat="server" CssClass="textbox-md"></asp:TextBox>
        </div>  
    </div>
    </ItemTemplate>
    <FooterTemplate>
    </FooterTemplate>
</asp:Repeater>

完成后,我可以像预期的那样简单地循环遍历控件并获取它们的值,从中构建对象列表。结果如下:

// Find all textboxes, looping through them to build an object list.  Generally there is a maximum of 4 parts
// associated here but there could be more in the future so this should expand too.
for (int j = 0; j <= UxAdditionalParts.Items.Count - 1; j++)
    {
        if (UxAdditionalParts.Items[j].ItemType == ListItemType.Item || UxAdditionalParts.Items[j].ItemType == ListItemType.AlternatingItem)
            {
                TextBox txtItm = (TextBox)UxAdditionalParts.Items[j].FindControl("UxItemNumber");
                TextBox txtQty = (TextBox)UxAdditionalParts.Items[j].FindControl("UxQuantity");
                if (txtItm != null & txtQty != null)
                {
                    // Create a new part and add it to our list.
                    AdditionalPart objAdditionalPart = new AdditionalPart();
                    objAdditionalPart.ItemNumber = txtItm.Text;
                    objAdditionalPart.Quantity = Convert.ToInt32(txtQty.Text) ;
                    loAdditionalParts.Add(objAdditionalPart);
                }
            }
        } 
//查找所有文本框,通过它们循环构建对象列表。通常最多有4个部件
//这里有关联,但将来可能会有更多,因此这也应该扩大。

对于(int j=0;j我最终将EnableViewState=“True”添加到中继器的标记中,然后我可以通过控件进行循环。我将在允许的情况下尽快发布解决方案代码:)