文本框中的文本更改
本文关键字:文本 | 更新日期: 2023-09-27 17:53:32
我有一些32个文本框和1个"保存"按钮。我想要的是保存的文本只有那些文本框有他们的文本改变。我怎样才能做到呢?我如何知道哪些文本框的文本已更改?
就我个人而言,我会在服务器端完成。假设没有涉及到数据绑定,您可以在ASPX.CS代码中执行以下操作:
...
private string InitialValue1
{
get { return ViewState[@"IV1"] as string; }
set { ViewState[@"IV1"] = value; }
}
// Repeat for all 32 text boxes.
protected void Page_Load( object sender, EventArgs e )
{
if(!IsPostBack )
{
TextBox1.Text = InitialValue1 = loadText1FromDatabase();
// Repeat for all 32 text boxes.
}
}
protected void MySaveButton_Click( object sender, EventArgs e )
{
if ( TextBox1.Text!=InitialValue1 ) saveText1ToDatabase( TextBox1.Text );
// Repeat for all 32 text boxes.
}
...
当然,在实际场景中,我会做一些循环/数组处理,而不是编写32个相同的函数/属性。
我建议在加载时使用jQuery函数来生成一个假的旧数据输入。像这样:
$(document).ready(function (){
$(":text").each(
var newid=$(this).attr("id") + "_old";
var oldvalue=$(this).val();
var formy=$("form");
formy.appendChild("<input type='hidden' name='" + newid +"' value='" + oldvalue +"'>);
})
这样,如果您更改号码,函数会自动为您写正确的号码。然后在服务器端,您可以用下面的内容比较这些值:
var inputs = Request.Form.Keys.Where(rs=>rs.Contains("_old"));
foreach (var input in inputs)
{
//check the _old vs the input without the old and do your thing
}
您可以在客户端检测到这一点,或者比较post和send的值,通过更改的项列表。但是,如果您想在服务器端执行此操作,则必须加载服务器数据并手动将其与每个文本框进行比较。
使用会话变量存储每次回发的数据并比较值。
你可以使用HiddenFields。在页面加载时,您可以使用原始文本框值设置隐藏字段。在保存按钮上,你可以比较HiddenFields值与TextBox值,如果HiddenField值没有
使用cookie变量存储每次回发的数据并比较值
你使用的是哪个版本,在3.5及以上的情况下,我会要求你检查这个IPostBackDataHandler。这将有助于你实现你想要的。
在以前的版本中,我认为您将不得不通过将其与原始文本进行比较来做到这一点,或者至少可以使用MERGE关键字(你将不得不修改你的数据库查询),而你正在推动你的记录到数据库。