2013-05-17 28 views
0

我有一个很奇怪的问题。我正在编写一个项目编辑页面时遇到了一些奇怪的bug,即ASP将旧值传给C#.cs代码。C#获取文本字段的以前加载的值

在我Page_Load

private int SomeID = 0; 
if (!IsPostBack) { 
    ... 
    SomeID = Convert.ToInt32(Page.RouteData.Values["id"]) 
    LoadFunction(); 
} 

加载功能:

DataBaseDataContext db = new DataBaseDataContext(); 
var Item = db.FirstOrDefault(k => k.ID == SomeID); 

NameTextBox.Text = Item.Name; 
PriceTextBox.Text = Item.Price.ToString(); 

节电功能:

DataBaseDataContext db = new DataBaseDataContext(); 
var Item = db.FirstOrDefault(k => k.ID == SomeID); 

Item.Name = NameTextBox.Text; 
Item.Price = Convert.ToDecimal(PriceTextBox.Text); 
... 
db.SubmitChanges(); 

我打扰了,为什么它不保存更改我,所以我在保存函数中设置db.SubmitChanges()断点(加载工作正常)。但是,当我在VisualStudio中查看预览值时,它告诉我它想要发送先前加载的值,而不是我在表单中编辑的值。

我必须缺少一些东西,因为它在我的代码的其他地方工作,但我不知道它是什么。

+0

什么是您的Page_Load样子? –

+0

我编辑了文章 – Lemurr

+0

当你命中断点时,NameTextBox.Text显示什么?旧的或编辑的值? – YK1

回答

1

尝试在private int SomeID = 0使用static使用Page.Ispostback都归到你的Page_Load事件像

//Page_Load Event 
if (!Page.IsPostBack) 
    { 
     DataBaseDataContext db = new DataBaseDataContext(); 
     var Item = db.FirstOrDefault(k => k.ID == SomeID); 

     NameTextBox.Text = Item.Name; 
     PriceTextBox.Text = Item.Price.ToString(); 
    } 

检查MSDN

相反的private,如果将持有旧的主要价值,解决你的问题也是如此。

希望它适合你。

+0

我的加载函数被封装在(!IsPostBack)中,并且我保存了f。从按钮 – Lemurr

+0

被调用,但在你的加载函数中没有'!IsPostBack'。 – Rahul

1

检查是否PostBackPage_Load你不是设置值再次TextBox es。

if (!Page.IsPostBack) 
{ 
    DataBaseDataContext db = new DataBaseDataContext(); 
    var Item = db.FirstOrDefault(k => k.ID == SomeID); 

    NameTextBox.Text = Item.Name; 
    PriceTextBox.Text = Item.Price.ToString(); 
} 
+0

我有我的加载函数(!!IsPostBack),并保存了f。从按钮调用 – Lemurr

+0

然后请显示更多代码。 – gzaxx

2

集SomeID外!的IsPostBack