在页面上对TextBox的值进行的修改,传回数据库时不成功

ykpiverson 2012-04-11 12:34:13
利用IntiData方法对页面进行初始化
public void InitData()
{
int activityID = Convert.ToInt32(Request.QueryString["activity_id"]);
BusinessLogical.Activity activity = new BusinessLogical.Activity();
activity.LoadData(activityID);//从数据库中加载数据
//初始化文本框中的值
TextBoxTitle.Text = activity.Info_Title;
TextBoxAddress.Text = activity.Info_Position;
TextBoxContent.Text = activity.Info_Content;
}

在页面中修改文本框中的值。
然后通过通过鼠标单击事件对返回对数据库的修改
 protected void ButtonUpdate_Click(object sender, EventArgs e)
{
BusinessLogical.Activity activity = new BusinessLogical.Activity();
activity.Info_ID = Convert.ToInt32(Request.QueryString["activity_id"]);

Hashtable ht = new Hashtable();//新建哈希表并将文本框中修改后的值添加进哈希表中
ht.Add("Info_Title", SqlStringFormat.GetQuotedString(TextBoxTitle.Text));
ht.Add("Info_Address", SqlStringFormat.GetQuotedString(TextBoxAddress.Text));
ht.Add("Info_Content", SqlStringFormat.GetQuotedString(TextBoxContent.Text));

activity.Update(ht);
//对数据库进行更新
但是修改并没有完成。数据库和文本框中显示的依然是原来的值。
我进行了如下测试
 //测试
foreach (DictionaryEntry h in ht)
{
Response.Write(h.Key.ToString()+h.Value.ToString());
}

结果输出的是文本框中初始化时的值,也就是说对TextBoxTitle.text,TextBoxAddress.Text,TextBoxContent.Text的修改后的值并没有被添加进哈希表ht中

这是什么原因呢?

...全文
273 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhou_xuexi 2012-04-11
  • 打赏
  • 举报
回复
activity.Update(ht);这个方法的代码呢
anzhiqiang_touzi 2012-04-11
  • 打赏
  • 举报
回复

public void InitData()
{

if (!IsPostBack)
{
int activityID = Convert.ToInt32(Request.QueryString["activity_id"]);
BusinessLogical.Activity activity = new BusinessLogical.Activity();
activity.LoadData(activityID);//从数据库中加载数据
//初始化文本框中的值
TextBoxTitle.Text = activity.Info_Title;
TextBoxAddress.Text = activity.Info_Position;
TextBoxContent.Text = activity.Info_Content;
}

}


觉悟之时 2012-04-11
  • 打赏
  • 举报
回复
你的SQL语句怎么写的,要把这些传递到SQL语句的字段啊。
test2050 2012-04-11
  • 打赏
  • 举报
回复
解决了散分哈哈
ykpiverson 2012-04-11
  • 打赏
  • 举报
回复
感谢大家,解决了。用来格式化SQL语句的GetQuotedString()方法用来在更新方法中时,导致update语句中每个key = value 之间有两个“,”。
xboxeer 2012-04-11
  • 打赏
  • 举报
回复
直接用你的SQL语句去数据库里面执行看看
ykpiverson 2012-04-11
  • 打赏
  • 举报
回复
已经加了if(!IsPostBack),进过测试,TextBox也获得新值了,但是数据库就是并没有更新,不知道问题出在哪里了[Quote=引用 12 楼 的回复:]

引用 11 楼 的回复:

你的Init方法放在if(!IsPostBack)里了么?
页面执行顺序是按了按钮之后先Page_Load,然后再是Click事件所以你的Init又重新给TextBox赋值了 取到的也是以前的值


+1

如果是赋值后为新值,但是进入后还是没有更新,绝对是Ispostback的问题了,加上就成!
[/Quote]
画龙添脚 2012-04-11
  • 打赏
  • 举报
回复
if(!IsPostBack)
画龙添脚 2012-04-11
  • 打赏
  • 举报
回复
而且要判断if(!IsPostBack)
画龙添脚 2012-04-11
  • 打赏
  • 举报
回复
哥更新后要重新绑定
xuelang1225 2012-04-11
  • 打赏
  • 举报
回复
11楼说的那种情况也是可能的。
xuelang1225 2012-04-11
  • 打赏
  • 举报
回复
调试看一下你的test字符串直接放在数据库里执行能否成功更新数据,如果不行,就需要对sql语句进行修正。
大Y 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

你的Init方法放在if(!IsPostBack)里了么?
页面执行顺序是按了按钮之后先Page_Load,然后再是Click事件所以你的Init又重新给TextBox赋值了 取到的也是以前的值
[/Quote]

+1

如果是赋值后为新值,但是进入后还是没有更新,绝对是Ispostback的问题了,加上就成!
xboxeer 2012-04-11
  • 打赏
  • 举报
回复
你的Init方法放在if(!IsPostBack)里了么?
页面执行顺序是按了按钮之后先Page_Load,然后再是Click事件所以你的Init又重新给TextBox赋值了 取到的也是以前的值
ykpiverson 2012-04-11
  • 打赏
  • 举报
回复
帖子沉了,大家帮帮忙啊
ykpiverson 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

C# code

public void InitData()
{

if (!IsPostBack)
{
int activityID = Convert.ToInt32(Request.QueryString["activity_id"]);
BusinessLogical.Activity activity = new ……

[/Quote]
像这样修改InitData方法后,执行
foreach (DictionaryEntry h in ht)
{
Response.Write(h.Key.ToString()+h.Value.ToString());
}
输出的是TextBox中的新内容,说明对TextBoxTitle.text,TextBoxAddress.Text,TextBoxContent.Text的修改后的值已经被添加进哈希表ht中。但是数据库中的内容并未被修改。
activity的update方法如下
  public void Update(Hashtable activityInfo)
{
string strWhere = " where Info_ID = " + this._Info_ID;
Database db = new Database();
db.Update("[ActivityInfo]", activityInfo, strWhere);


}
其中用到Database类的Update方法为
 public bool Update(string TableName, Hashtable hashtable,string where)
{
int Count = 0;
if (hashtable.Count <= 0)
{
return true;
}
string Fields = " ";
foreach (DictionaryEntry item in hashtable)
{
if (Count != 0)
{
Fields += ",";
}
Fields += item.Key.ToString();
Fields += "=";
Fields += item.Value.ToString();
Count ++;
}
Fields += " ";
string SqlString = "Update " + TableName + " Set " + Fields + where;
return Convert.ToBoolean(ExecuteSQL(SqlString));
}
}

请看看是不是这两个方法有什么问题呢?
zhou_xuexi 2012-04-11
  • 打赏
  • 举报
回复
你自己可以调试一下Update方法里面的test是什么sql语句,然后还可以看看方法参数activityInfo是否有值
ykpiverson 2012-04-11
  • 打赏
  • 举报
回复
这是activity的update的方法
  public void Update(Hashtable activityInfo)
{
string strWhere = " where Info_ID = " + this._Info_ID;
Database db = new Database();
db.Update("[ActivityInfo]", activityInfo, strWhere);

int Count = 0;
string Fields = " ";
foreach (DictionaryEntry item in activityInfo)
{
if (Count != 0)
{
Fields += ",";
}
Fields += item.Key.ToString();
Fields += "=";
Fields += item.Value.ToString();
Count ++;
}
Fields += " ";

string test = "update ActivityInfo set " + Fields + "where Info_ID =" + this._Info_ID;
db.ExecuteSQL(test);
}
bdmh 2012-04-11
  • 打赏
  • 举报
回复
是不是PageLoad中调用了InitData方法,有没有用IsPostBack做一下限制,只第一次加载时调用InitData
手可摘星辰 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
或许是因为页面的回传机制 IsPostBack
[/Quote]


应该是
加载更多回复(1)

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧