冰雹,
对于 ASP.NET,实现这一壮举的最简单方法是使用 hiddenField。有一次,我希望我可以在文本框上添加一个数据属性,并通过一点 JavaScript 将旧值放在那里,然后在后面的代码中读取该属性。但不幸的是,这不是回发系统的工作方式。
所以,一旦用户将光标放在 TextBox 中,我们希望获取旧值并将其保存在隐藏字段中。我们通过将 TextBox 的 onfocus 属性设置为 javascript 方法的名称来完成此操作,该方法将执行保存操作。我们称这个方法为 saveOldValue。
<asp:TextBox ID="MyTextBox" runat="server" AutoPostBack="true" onfocus="setOldValue()" OnTextChanged="MyTextBox_TextChanged"></asp:TextBox>
<asp:HiddenField ID="oldValueHiddenField" Value="" ClientIDMode="Static" runat="server" />
在添加 javascript setOldValue 方法之前:为了使代码尽可能通用,我们不要让 saveOldValue 方法知道调用它的特定 TextBox 或它将保存旧值的特定 HiddenField 的任何信息。这样我们就可以将此方法与任何 TextBox 和 HiddenFields 一起使用。因此,让我们将 saveOldValue 传递给文本框的当前实例,以便它可以访问 TextBox 的属性。此外,让我们在 TextBox 上添加一个属性,该属性将保存 hiddenField 的 ID,该 ID 最终将存储旧值;让我们将此属性称为 data-hiddenField 并将其分配给 HiddenField 的 ID。
<asp:TextBox ID="MyTextBox" runat="server" AutoPostBack="true" data-hiddenField="oldValueHiddenField" onfocus="setOldValue(this)" OnTextChanged="MyTextBox_TextChanged"></asp:TextBox>
<asp:HiddenField ID="oldValueHiddenField" Value="" ClientIDMode="Static" runat="server" />
接下来,让我们在 JavaScript 中设置方法 setOldVaue:
<script>
function setOldValue(e){
//I am using a bit of jQuery here, but feel free to go pure JS
var hiddenField = $(e).attr("data-hiddenField");
var oldValue = $(e).val();
$("#"+hiddenField).val(oldValue);
}
</script>
接下来,让我们在 TextChanged 事件 [离开文本框时触发] 的代码中获取值:
protected void MyTextBox_TextChanged(object sender, EventArgs e)
{
var tb = sender as TextBox;
var oldVaue = oldValueHiddenField.Value;
var newValue = tb.Text;
}
希望这能增加一些价值。
//和平