我有一个问题是控制asp.net下拉菜单的回发
如上图所示,如果用户在文本框中键入,则下拉框不应回发。我怎样才能做到这一点?
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事件,它将值插入表
答案 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>
所以这样做的是,无论何时将文本输入文本框,下拉列表都将不再发回。如果文本框为空,则下拉列表将回发!我认为这就是你想要实现的目标。