我有32个文本框和1个“保存”按钮。我想仅保存那些文本框中已更改文本的内容。如何实现?我如何知道哪些文本框的文本已更改?
$(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
}
个人而言,我会在服务器端处理。假设您没有涉及数据绑定,您可以在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.
}
...
您可以在客户端检测按键,或者比较提交的值并发送更改项列表来检测此项。但是,如果您想在服务器端执行此操作,您将需要加载服务器数据并手动将其与每个文本框进行比较。
您可以使用 HiddenFields。在页面加载时,您可以使用原始 TextBox 值设置 HiddenFields。 在保存按钮上,您可以将 HiddenFields 值与 TextBox 值进行比较,如果 HiddenField 值与 TextBox 值不匹配,则可以将该 TextBox 值保存在 DB 中,否则不保存。