我有文本框和按钮。
该按钮使用由textbox textchanged事件操纵的值。
我不希望在文本框更改事件更改值之前触发按钮单击事件。
void tprice_TextChanged(object sender, EventArgs e) {
idtextbox tsender = (idtextbox)sender;
decimal value = 0;
decimal.TryParse(tsender.Text, out value);
if (area_updates.ContainsKey(tsender.id)) { area_updates[tsender.id].price = value; }
else { area_updates.Add(tsender.id, new area_update(tsender.id) { price = value }); }
Session["area_updates"] = area_updates;
}
protected void bsave_Click(object sender, EventArgs e) {
}
答案 0 :(得分:1)
Afaik无法确保事件订单TextChanged
- > ButtonClick
。
你应该采用不同的方法。
TextChanged
逻辑移至ButtonClick
事件或TextBox
AutoPostBack=true
,但这需要额外的回发所以我建议将逻辑放入ButtonClick
- 并删除TextChanged
事件。
答案 1 :(得分:1)
编辑:根据您的另一条评论,如果以编程方式添加和删除文本框,您还可以使用按钮和文本框创建自定义用户控件,并实现此逻辑,然后以编程方式添加用户控制。这是一个按钮,文本框将相互关联,不知道其他人。我不确定你想要这样做的背景,所以这种方法可能不是最好的。
使用textboxIsDirty标志,您可以在两个事件处理程序中设置和取消设置。
private bool tpriceIsDirty = false;
void tprice_TextChanged(object sender, EventArgs e) {
tpriceIsDirty = true;
// Do work
}
protected void bsave_Click(object sender, EventArgs e) {
if (tpriceIsDirty)
{
tpriceIsDirty = false;
// Do work
}
}
正如另一个答案中所建议的,我也会在Click方法中使用TextChanged方法中的当前逻辑。但是,如果文本框保持不变,您可以将tpriceIsDirty标志绑定到bsave.Enabled属性以完全禁用该按钮。从用户体验的角度来看,它更好。 :)
编辑:根据您所做的评论,您还可以动态添加和删除事件处理程序。这种方法的变体可能对您有益。
void tprice_TextChanged(object sender, EventArgs e) {
if (bsave.Click == null)
{
bsave.Click += bsave_Click;
}
....
}
protected void bsave_Click(object sender, EventArgs e) {
bsave.Click = null;
}
答案 2 :(得分:0)
是的可能 ...只是看看下面的解决方案..它基本上是a trick created using javascript
但足够强大..
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script>
function EnsureNoSubmit(txt) {
//alert('Ensured no submit');//test cases
document.getElementById('<%=hdn.ClientID%>').value = false;
}
function isOkToSubmit() {
var needSubmit = document.getElementById('<%=hdn.ClientID%>').value;
//if (needSubmit != '') {alert('No Submit now');}else {alert('Ok with Submit');}//test cases
return needSubmit == '';
}
function MakeSureSubmit() {
//alert('no submit revoked');//test cases
document.getElementById('<%=hdn.ClientID%>').value = '';
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:HiddenField runat="server" ID="hdn" />
<asp:TextBox AutoPostBack="true" runat="server" ID="txt" onchange="EnsureNoSubmit();" OnTextChanged="txt_TextChanged"></asp:TextBox>
<asp:Button Text="Click Me" ID="btnClickMe" OnClientClick="return isOkToSubmit();" OnClick="btnClickMe_Click" runat="server" />
</div>
</form>
</body>
</html>
在背后的代码上只添加一行
protected void txt_TextChanged(object sender, EventArgs e)
{
//Your code is here
Page.ClientScript.RegisterStartupScript(this.GetType(),"Anything","MakeSureSubmit();",true);
}
工作!!
答案 3 :(得分:0)
https://msdn.microsoft.com/de-de/library/ms158374(v=vs.110).aspx