如何以编程方式控制回发?

时间:2014-05-12 20:38:43

标签: c# asp.net

我有一个问题是控制asp.net下拉菜单的回发

enter image description here

如上图所示,如果用户在文本框中键入,则下拉框不应回发。我怎样才能做到这一点?

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        if (!IsPostBack)
        {
            DataTable Product = new DataTable();
            SqlConnection conn = new SqlConnection(connection);
            SqlDataAdapter da = new SqlDataAdapter("SELECT ProductID, ProductName FROM dbo.Product", conn);
            conn.Open();
            da.Fill(Product);
            conn.Close();
            drp1.DataSource = Product;
            drp1.DataValueField = "ProductID";
            drp1.DataTextField = "ProductName";
            drp1.DataBind();
            drp1.Items.Insert(0, new ListItem("---Select Product---", "0"));
        }
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
protected void drp1_SelectedIndexChanged(object sender, EventArgs e)
{
    int ProductID = Convert.ToInt16(drp1.SelectedValue);
    DataTable Signing = new DataTable();
    SqlConnection conn = new SqlConnection(connection);
    SqlDataAdapter da = new SqlDataAdapter("SELECT SigningID, SigningDetail FROM dbo.Signing WHERE ProductID = "+ ProductID, conn);
    conn.Open();
    da.Fill(Signing);
    conn.Close();
    drp2.DataSource = Signing;
    drp2.DataValueField = "SigningID";
    drp2.DataTextField = "SigningDetail";
    drp2.DataBind();
    drp2.Items.Insert(0, new ListItem("---Select Signing Detail---", "0"));
}

我担心的是,当用户在文本框中输入某些内容时,下拉框中的值不应插入到事务表中,但应插入文本框中的值。按钮上有一个OnClick事件,它将值插入表

3 个答案:

答案 0 :(得分:1)

for下拉框更改AutoPostBack属性

欢呼声。

答案 1 :(得分:0)

在这种情况下,您应该检查TextBox.Text属性,如果它是空的,那么只需忽略更改。

protected void drp1_SelectedIndexChanged(object sender, EventArgs e)
    {
//Check TextBox first
if(TextBoxID.Text==string.Empty)
{
        int ProductID = Convert.ToInt16(drp1.SelectedValue);
        DataTable Signing = new DataTable();
        SqlConnection conn = new SqlConnection(connection);
        SqlDataAdapter da = new SqlDataAdapter("SELECT SigningID, SigningDetail FROM dbo.Signing WHERE ProductID = "+ ProductID, conn);
        conn.Open();
        da.Fill(Signing);
        conn.Close();
        drp2.DataSource = Signing;
        drp2.DataValueField = "SigningID";
        drp2.DataTextField = "SigningDetail";
        drp2.DataBind();
        drp2.Items.Insert(0, new ListItem("---Select Signing Detail---", "0"));
    }
}

当然,您需要将TextBoxID更改为您为TextBox控件提供的任何ID

答案 2 :(得分:0)

如果我正确理解您的问题,我认为您需要根据文本框中是否有文字来有条件地进行下拉AutoPostBack

你需要使用一些jQuery魔法来完成这项工作。首先,将您的两个下拉列表的AutoPostBack属性设置为false(相信我)。

然后在页面底部(或保存javascript的任何地方),添加以下代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

<script type="text/javascript">
    var usingTextBox = false;

    function FixDropDowns()
    {
        if (usingTextBox)
        {
            // If they are typing in the text box, then you do not want a postback.
            // So lets make the .change() function handler empty.
            $('#<%= drp1.ClientID %>').change(function() {
                // do nothing
            });
            $('#<%= drp2.ClientID %>').change(function() {
                // do nothing
            });
        } else {
            // They are not typing in the text box, so make dropdown postback.
            $('#<%= drp1.ClientID %>').change(function() {
                __doPostBack('<%= drp1.ClientID %>', '');
            });
            $('#<%= drp2.ClientID %>').change(function() {
                __doPostBack('<%= drp2.ClientID %>', '');
            });
        }
    }

    $(function() {
        FixDropDowns();
        $('#<%= txtTextBox.ClientID %>').on('input', function() {
            var txtValue = $('#<%= txtTextBox.ClientID %>').val();
            if (txtValue == '')
                usingTextBox = false;
            else usingTextBox = true;
            FixDropDowns();
        });
    });

</script>

所以这样做的是,无论何时将文本输入文本框,下拉列表都将不再发回。如果文本框为空,则下拉列表将回发!我认为这就是你想要实现的目标。