【问题标题】:ASP.NET Find DropDown Value Inside Repeater Control Part IIASP.NET 在中继器控件中查找下拉值第二部分
【发布时间】:2009-05-31 17:29:17
【问题描述】:

我对这个主题有几个问题,仍然有问题。

我想从转发器控件内的多个下拉列表和文本框控件中查找值。

db.ConnectionString = SystemConnString
    db.Open()

    Dim selectedAdTitle As String = ""
    Dim enteredAdFullName As String = ""

    cmd.Parameters.Add(New SqlParameter("@TransactionID", TransactionID))
    cmd.Parameters.Add(New SqlParameter("@AdTitle", selectedAdTitle))
    cmd.Parameters.Add(New SqlParameter("@AdFullName", enteredAdFullName))

    For i As Integer = 0 To myRepeater.Items.Count - 1

        Dim AdTitle As DropDownList = DirectCast(myRepeater.Items(i).FindControl("AdTitle"), DropDownList)
        Dim AdFullName As TextBox = DirectCast(myRepeater.Items(i).FindControl("AdFullName"), TextBox)

        selectedAdTitle = AdTitle.Text
        enteredAdFullName = AdFullName.Text

        cmd.Parameters("@AdTitle").Value = selectedAdTitle
        cmd.Parameters("@AdFullName").Value = enteredAdFullName

        SQL = ""
        SQL = SQL & "INSERT INTO InsuredPersons (TransactionID,Title,FullName) VALUES ("
        SQL = SQL & "@TransactionID,"
        SQL = SQL & "@AdTitle,"
        SQL = SQL & "@AdFullName"
        SQL = SQL & ")"

        cmd.CommandText = SQL
        cmd.Connection = db
        cmd.ExecuteNonQuery()
    Next

AdTitle 和 AdFullName 似乎没有带来价值观。没有错误,因此他们发现控件正常。下面是ASPX文件代码。

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate>
        <asp:DropDownList ID="AdTitle" runat="server">
            <asp:ListItem Selected="True" Value="" Text=""/>
            <asp:ListItem Selected="False" Value="Miss" Text="Miss"/>
            <asp:ListItem Selected="False" Value="Ms" Text="Ms"/>
            <asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/>
            <asp:ListItem Selected="False" Value="Mr" Text="Mr"/>
            <asp:ListItem Selected="False" Value="Other" Text="Other"/>
        </asp:DropDownList>

       <asp:TextBox ID="AdFullName" runat="server"></asp:TextBox>
   </ItemTemplate>

编辑:

Repeater 在页面加载时构建

    Dim repeatTimes((TotalAdInsured - 1)) As Integer

    myRepeater.DataSource = repeatTimes
    myRepeater.DataBind()

DirectCast 在按钮点击时完成

Protected Sub continueButtonDetails_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles continueButtonDetails.Click

答案:必须将 IsPostback 放在中继器构造周围。

If Not IsPostBack() Then

        Dim repeatTimes((TotalAdInsured - 1)) As Integer

        myRepeater.DataSource = repeatTimes
        myRepeater.DataBind()

    End If

【问题讨论】:

  • @Mark: 两次将是一个问题(错字?)。您能否也提供连接到转发器或页面的事件?
  • 嗨 Kb,我更新了上面的问题。

标签: asp.net vb.net datarepeater


【解决方案1】:

首先我认为你想要:

myDropDown.SelectedItem.Text

而不是

myDropDown.Text

还有为什么你有两个 ItemTemplates?我不知道你甚至可以这样做......

您是否在页面生命周期的任何其他时间点与任何 TextBox 或 DropDown 交互?

尝试围绕转发器数据绑定进行 PostBack 检查。我认为发生的事情是您动态加载控件,因此它们没有视图状态,因此值将始终为空。

【讨论】:

  • 只有两个来强调它被重复了。我的代码中只有一个。对不起。
  • 你也可以为值做 myDropDown.SelectedText 或 myDropDown.SelectedValue
  • 文本框的值也没有通过,所以我不确定这就是原因。
【解决方案2】:

确保您在页面生命周期的正确时间点运行代码。如果你做得太早(例如在 OnInit 中),那么它还没有来自客户端的值。尝试将其移至您的 OnCommand()/OnSubmit() 事件,看看会发生什么。以下是一些关于 ASP.NET 页面生命周期的参考:

  1. http://msdn.microsoft.com/en-us/library/ms178472.aspx
  2. http://www.15seconds.com/issue/020102.htm
  3. http://www.beansoftware.com/ASP.NET-Tutorials/Page-Life-Cycle.aspx
  4. Picture of asp.net page life cycle

【讨论】:

  • 嗨,亚当,代码在单击按钮时运行。 TransactionID 取自转发器控件 ok 上方的隐藏字段,并插入到 db 表中。我可以做些什么来验证正在传递的值吗?
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多