TextBoxes中的文本更改

时间:2011-04-29 05:51:47

标签: c# asp.net textbox

我有32个TextBoxes和1个“Save”按钮。我想要的是只为那些文本被更改的TextBox保存文本。我怎样才能做到这一点?我如何知道哪些TextBox已更改的文本?

7 个答案:

答案 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 关键字 (当您将记录推送到数据库中时,您将不得不修改数据库查询。)