繁体   English   中英

获取asp.net中继器中的HiddenField的值

[英]Get the value of HiddenField inside asp.net repeater

当我尝试在直放站内的直放站内使用隐藏字段时

<repeater>
   <repeater>
     <hiddenfield>

我尝试使用此代码输入值

if (shiftrepeater.Items.Count > 0)
{
    for(int shiftcount = 0 ; shiftcount<shiftrepeater.Items.Count ; shiftcount++)
    {
        Repeater temp = (Repeater)shiftrepeater.Items[shiftcount].FindControl("saturdayrepeater");

        for (int count = 0; count < temp.Items.Count; count++)
        {
            DropDownList ds = (DropDownList)temp.FindControl("userdropdown");
            HiddenField hf = (HiddenField)temp.FindControl("hiddenid");
            SarcShiftUser user = new SarcShiftUser();
            user.id = int.Parse(hf.Value);
            user.workzone_id=1;
            user.xdate = saturday.Text;
            user.table_id = id;
            user.shift_id = shiftcount+1;

            user.user_id  = int.Parse(ds.SelectedValue);
            user.level_id= 1;
            user.team_id=1;


        }
    }
}

asp.net代码:

<asp:Repeater ID="saturdayrepeater" runat="server" DataSourceID="saturdayrepeaterds">
    <HeaderTemplate>
        <table width="100%" cellpadding="0" cellspacing="0">
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
        <td>
            <asp:HiddenField ID="hiddenid" runat="server" Value='<%#Eval("id") %>'  />
            <asp:DropDownList ID="userdropdown" CssClass="select" runat="server" DataSourceID="userdropdownds" DataTextField="name" DataValueField="id" AppendDataBoundItems="true">
                <asp:ListItem Text="" Value="" Selected="True"></asp:ListItem>
             </asp:DropDownList>
        </td></tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

一切都很好...但是我得到了这个错误:

你调用的对象是空的。

在这一行:

user.id = int.Parse(hf.Value);

为什么会出现错误?

看起来hf为null,因为您尝试使用temp.FindControl而不是temp.Items[count].FindControl查找HiddenField

改变以下

DropDownList ds = (DropDownList)temp.FindControl("userdropdown");
HiddenField hf = (HiddenField)temp.FindControl("hiddenid");

对此

DropDownList ds = (DropDownList)temp.Items[count].FindControl("userdropdown");
HiddenField hf = (HiddenField)temp.Items[count].FindControl("hiddenid");

UPDATE

如果ds.SelectedValue为空字符串或包含非数字字符,则此行将引发错误

user.user_id  = int.Parse(ds.SelectedValue);

您需要将其更改为此

int userID = 0;
if (int.TryParse(ds.SelectedValue, out userID))
{
    user.user_id  = userID;
}
else
{
    // do something when ds.SelectedValue is non numeric
}

尝试这个

foreach (RepeaterItem items in temp.Items)
        {
            DropDownList ds = (DropDownList)items.FindControl("userdropdown");
            HiddenField hf = (HiddenField)items.FindControl("hiddenid");

          //your code
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM