C#获取以前加载的文本字段值

时间:2013-05-17 09:07:30

标签: c# asp.net

我有一个非常奇怪的问题。我正在处理一个项目编辑页面,遇到一些奇怪的错误,即ASP将旧值传递给C#.cs代码。

在我的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中查看值预览时,它向我显示它想要发送以前加载的值而不是我在表单中编辑的值。

我必须遗漏一些东西,因为它适用于我的代码的其他地方,但我不知道它是什么。

3 个答案:

答案 0 :(得分:2)

在外面设置SomeID!IsPostback

答案 1 :(得分:1)

尝试将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 private int SomeID = 0中的static,而是保留旧的主要价值并解决问题。

希望它适合你。

答案 2 :(得分:1)

检查PostBackPage_Load上的TextBox是否再次为if (!Page.IsPostBack) { DataBaseDataContext db = new DataBaseDataContext(); var Item = db.FirstOrDefault(k => k.ID == SomeID); NameTextBox.Text = Item.Name; PriceTextBox.Text = Item.Price.ToString(); } es设置值。

{{1}}