0

私はかなり奇妙な問題を抱えています。アイテム編集ページの最後で作業していたところ、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 で値のプレビューを調べたところ、フォームで編集した値ではなく、以前に読み込まれた値を送信したいことがわかりました。

コードの他の場所で機能するため、何かが欠けているに違いありませんが、それが何であるかわかりません。

4

3 に答える 3

2

!IsPostback の外で SomeID を設定する

于 2013-05-17T09:29:54.410 に答える
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、if は古いプライマリ値を保持し、問題も解決します。private int SomeID = 0static

それがうまくいくことを願っています。

于 2013-05-17T09:10:46.817 に答える
1

これらのes に再度値を設定していないかどうかを確認PostBackします。Page_LoadTextBox

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

   NameTextBox.Text = Item.Name;
   PriceTextBox.Text = Item.Price.ToString();  
}
于 2013-05-17T09:11:20.380 に答える