我有一个非常奇怪的问题。我正在处理一个项目编辑页面,遇到一些奇怪的错误,即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中查看值预览时,它向我显示它想要发送以前加载的值而不是我在表单中编辑的值。
我必须遗漏一些东西,因为它适用于我的代码的其他地方,但我不知道它是什么。
答案 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)
检查PostBack
中Page_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}}