我有32个TextBoxes和1个“Save”按钮。我想要的是只为那些文本被更改的TextBox保存文本。我怎样才能做到这一点?我如何知道哪些TextBox已更改的文本?
答案 0 :(得分: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个相同的函数/属性。
答案 1 :(得分:1)
我建议在加载时使用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
}
答案 2 :(得分:0)
您可以在客户端检测到这一点,或者比较post上的值,并通过更改的项列表发送。 但是,如果要在服务器端执行此操作,则必须加载服务器数据并手动将其与每个文本框进行比较。
答案 3 :(得分:0)
使用会话变量存储每次回发的数据并比较值。如果某个文本框的值发生更改,则保存,否则不保存。
答案 4 :(得分:0)
您可以使用HiddenFields。在页面加载时,您可以使用原始TextBox值设置HiddenFields。 在保存按钮上,您可以将HiddenFields值与TextBox值进行比较,如果HiddenField值没有 与TextBox值匹配,然后您可以将该TextBox值保存在DB中,否则不会。
答案 5 :(得分:0)
使用cookie变量存储每次回发的数据并比较值。
答案 6 :(得分:0)
您使用的是哪个版本,如果是3.5及以上版本,我会要求您查看此IPostBackDataHandler。这可以帮助您实现您想要的目标。
在以前的版本中,我认为只有将其与原始文本进行比较才能实现,或者至少可以使用 MERGE 关键字 (当您将记录推送到数据库中时,您将不得不修改数据库查询。)