【问题标题】:List box event is not firing inside update panel control in asp.net列表框事件未在 asp.net 中的更新面板控件内触发
【发布时间】:2015-09-24 14:52:38
【问题描述】:

我想在选择 ListBox 的 SelectedIndexChanged 事件时从数据库中加载记录。我没有在我的表单中使用更新面板控件,一切都很好。现在我想使用更新面板控件,这样每次我从列表框中选择一个项目时,我的表单都不会回发。我试过了,但没有按预期工作。请帮助我克服我面临的这个问题。

.aspx 代码

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" >
        <ContentTemplate>
            <asp:ListBox ID="lstTest" runat="server" AutoPostBack="True" Width="450px" OnSelectedIndexChanged="lstTest_SelectedIndexChanged"></asp:ListBox>
           <asp:TextBox ID="txtReport" runat="server"></asp:TextBox>
           <asp:TextBox ID="txtImression" runat="server"></asp:TextBox>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="lstTest" EventName="SelectedIndexChanged" />
        </Triggers>
    </asp:UpdatePanel>

.cs 后面的代码

protected void lstTest_SelectedIndexChanged(object sender, EventArgs e)
{
    int _serviceid = Convert.ToInt32(lstTest.SelectedValue);

    txtReport.Text = string.Empty;
    txtImression.Text = string.Empty;

    SqlConnection con = new SqlConnection(constr);
    SqlCommand cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "[get_rad_results]";
    cmd.Parameters.Add("@ServiceId", SqlDbType.Int).Value = _serviceid;
    cmd.Connection = con;


    try
    {
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())
        {
            txtReport.Text = dr["Report"].ToString();
            txtImression.Text = dr["Impression"].ToString();
        }
    }

    catch (Exception ex)
    {
        Response.Write("Error occured: " + ex.Message.ToString());
    }

    finally
    {
        con.Close();
        con.Dispose();
    }
}

【问题讨论】:

  • 使用 PostBackTrigger 而不是 AsyncPostBackTrigger。
  • 您的页面是否有任何脚本错误?你能验证你的lstTest_SelectedIndexChanged(..) 被执行了吗?我不太确定但不会按预期工作的确切含义

标签: c# asp.net


【解决方案1】:

也许您确实错过了 aspx 代码中的 script manager?我做了一个对我有用的小例子。

ASPX 代码

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"></asp:ListBox>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ListBox1" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

背后的代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // demo values
        for (int i = 0; i < 10; i++)
        {
            ListBox1.Items.Add("value " + i);
        }

    }
}

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    Debug.WriteLine(ListBox1.SelectedItem);
}

如果我确实错过了什么,请告诉我。

【讨论】:

  • 我确实在页面上添加了 ScriptManager。
  • 为什么投反对票?请让我知道您认为错误/不恰当的地方!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多