【问题标题】:Code behind not taking the current text from dropdown不从下拉列表中获取当前文本的代码
【发布时间】:2014-01-15 16:15:23
【问题描述】:

我的按钮和下拉列表有问题,当我单击按钮并在后面的代码中调用了一个方法时,后面的代码不是取下拉列表的当前文本,而是站点刷新后的文本.这个aspx代码是:

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager" EnablePageMethods="true" runat="server" />
<div>
    <table runat="server" id="showDBTable">
        <tr>
            <td>
                <asp:Button ID="showDB" runat="server" OnClick="showDBContent" Text="Show database content" />
            </td>
            <td>
                <asp:DropDownList runat="server" ID="showDBDropDown" OnLoad="FindExistingMetaTag" />
            </td>
        </tr>
    </table>
</div>
</form>

以及背后的代码:

protected void showDBContent(object sender, EventArgs e)
{
    String queryString = "";
    if (showDBDropDown.Text == "Show all")
    {
        queryString = "SELECT * from dbo.Search";
    }
    else
    {
        queryString = "SELECT * from dbo.Search where Tag = '" + (showDBDropDown.Text).TrimStart().TrimEnd() + "'";
    }

我该如何解决这个问题?

编辑 - 根据要求:

    protected void FindExistingMetaTag(object sender, EventArgs e)
{
    String queryString = "SELECT TAG from dbo.Tags";
    List<String> tagsShow = new List<String>();
    tagsShow.Add("Show all");
    using (SqlConnection conn = new SqlConnection(info.connectionString))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = queryString;
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                tagsShow.Add(reader.GetString(0));
            }
        }
    }

    showDBDropDown.DataSource = tagsShow;
    showDBDropDown.DataBind();
    showDBDropDown.SelectedIndex = 0;
}

我刚刚注意到它可能是“showDBDropDown.SelectedIndex = 0;”,但它似乎没有改变任何东西来删除它。

【问题讨论】:

  • 你能添加你的 FindExistingMetaTag 逻辑吗?
  • @MatiasP 向我们展示你的代码,你在哪里填充你的dropdownlist
  • 我的假设是,当页面进行回发时,下拉列表被清除并重新填充,导致您丢失先前选择的项目。您可能需要添加一些代码检查以确保列表不会在回发时重新实例化。
  • 这听起来很合乎逻辑,但我该怎么做呢? FindExistingMetaTag 添加
  • 我希望有人会创建名称为 '; 的标签删除表标签;--

标签: c# asp.net


【解决方案1】:

我认为您需要从showDBDropDown 中删除OnLoad 属性:

<asp:DropDownList runat="server" ID="showDBDropDown" />

并在第一次加载时在Page_Load 方法中填充showDBDropDown 的内容,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindDropdowns();
    }
}

private void BindDropdowns()
{
    String queryString = "SELECT TAG from dbo.Tags";
    List<String> tagsShow = new List<String>();
    tagsShow.Add("Show all");
    using (SqlConnection conn = new SqlConnection(info.connectionString))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
        cmd.CommandText = queryString;
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                tagsShow.Add(reader.GetString(0));
            }
        }
    }

    showDBDropDown.DataSource = tagsShow;
    showDBDropDown.DataBind();
}

【讨论】:

    【解决方案2】:

    根据您的需要使用yourDropdown.SelectedItem.TextyourDropdown.SelectedItem.Value 更新您的代码。

    if (showDBDropDown.SelectedItem.Text== "Show all")
    {
        queryString = "SELECT * from dbo.Search";
    }
    else
    {
        queryString = "SELECT * from dbo.Search where Tag = '" +    
                            (showDBDropDown.SelectedItem.Text) + "'";
    }
    

    查看here了解更多关于DropdownList的信息

    【讨论】:

      猜你喜欢
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多