[英]Update panel textchanged problem asp.net c#
离开文本框后,我希望它专注于下一个 object。 或者我希望按钮在单击按钮时起作用。 在我现在遇到的问题中,离开文本框后我在 gif 中遇到了问题。
默认.aspx
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<div class="form-group row">
<label class="col-lg-2 col-form-label">İşlem Tutarı</label>
<div class="col-lg-4">
<asp:TextBox ID="txtTutar" CssClass="form-control form-control-sm price" AutoPostBack="true" placeholder="0,00 ₺" runat="server" OnTextChanged="txtTutar_TextChanged"></asp:TextBox>
</div>
</div>
<div class="form-group row">
<label class="col-lg-2 col-form-label">Tahsil Edilen Tutar</label>
<div class="col-lg-4">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:TextBox ID="txtTahsilEdilen" AutoPostBack="true" CssClass="money form-control form-control-sm price" placeholder="0,00 ₺" runat="server" OnTextChanged="txtTahsilEdilen_TextChanged"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="txtTutar" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
默认.asp.cs
protected void txtTutar_TextChanged(object sender, EventArgs e)
{
txtTutar.Text = FormatMoney(decimal.Parse(txtTutar.Text));
txtTahsilEdilen.Text = txtTutar.Text;
}
我会做几件事之一。 首先,发生回发(文本已更改),然后当您单击另一个控件时 - 理论上您必须单击两次。
因此,要么删除回发更改的文本,然后在完成后格式化数字。 如果您真的希望在打字过程中发生这种情况,那么
如果您使用 ajax 控制工具包,有一个非常好的数字/货币格式化程序。
如果没有,那么考虑使用 jQuery 插件——它将消除对回发的需要,而您可以在客户端执行此操作。 这里有一个非常好的 JavaScript 库:
https://robinherbots.github.io/Inputmask/
另一种简单的方法 - 可能是最省力的?
根据更改的文本使用 ajax 调用。 这将允许您为一个文本框运行后面的代码,并且现在不会发生更新面板回发。
所以你可以像这样编写文本框:
<br />
<asp:TextBox ID="TextBox2" runat="server" onchange="fixnum(this)"
ClientIDMode="Static"
></asp:TextBox>
<script>
function fixnum(c) {
tBox = $(c)
$.ajax({
type: "POST",
data: JSON.stringify({ v: tBox.val() }),
contentType: "application/json;charset=utf-8",
dataType: "json",
async: true,
url: "WebForm4.aspx/curFormat",
success: function (MyReturn) {
tBox.val(MyReturn.d);
},
failure: function () {
tBox.val("")
}
});
}
</script>
在 web 页面中,我们有:
using System.Web.Services;
然后是一个公共的 web 方法,这样说:
[WebMethod]
public static string curFormat(string v)
{
Debug.Print("web call");
v = String.Format("{0:#,##0.00}", double.Parse(v));
return v;
}
所以,现在当你输入一个数字并点击 Tab 时——我们不做回发,而是运行存根后面的代码。 实际上,您可能会因此消除对更新面板的全部需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.