проблема с обновлением linq to sql с использованием текстовых полей asp.net - PullRequest
2 голосов
/ 10 декабря 2010

У меня есть текстовое поле и кнопка. При загрузке страницы я выбираю один столбец из одной строки и помещаю его значение в текстовое поле. У меня есть метод нажатия кнопки, который обновляет тот же столбец / строку со значением в текстовом поле.

Проблема, с которой я столкнулся, заключается в том, что, когда я очищаю текст в текстовом поле, набираю новые данные и нажимаю «Отправить», новое текстовое значение не сохраняется, оно использует старое.

Я ставлю точку останова в конце моего метода нажатия кнопки, и кажется, что asp.net отправляет старое значение текстового поля, а не новое, которое я вставил. Я полностью озадачен.

  • Эта проблема сохраняется, даже если у меня есть viewstate false в текстовом поле.
  • Оба моих запроса LINQ заключены в оператор using.

Есть идеи?

Редактировать: Вот полный код:

 protected void Page_Load(object sender, EventArgs e)
    {

        using (StoreDataContext da = new StoreDataContext())
        {
            var detail = from a in da.Brands
                         where a.BrandID == 5
                         select new
                         {
                             brand = a,
                         };
            foreach (var d in detail)
            {
                txtEditDescription.Text = d.brand.Description;
            }
        }  

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        using (StoreDataContext dk = new StoreDataContext())
        {

            Brand n = dk.Brands.Single(p => p.BrandID == 5);

        n.Description = txtEditDescription.Text;

        dk.SubmitChanges();
        }
    }

Ответы [ 3 ]

1 голос
/ 10 декабря 2010

Я понял это.Я должен использовать if (! IsPostBack) в коде, который изначально заполняет текстовое поле его значением.

Однако это не имеет смысла для меня.Если страница загружена и текстовое поле получает значение, то вы очищаете это значение и пытаетесь вставить его в базу данных, оно должно вставить это значение, а затем, когда страница отправит ответ, получит новое значение из базы данных и поместитзначение в текстовом поле.

То, как он на самом деле работает, создает впечатление, что он выполняет код загрузки страницы до того, как код щелчка кнопки будет выполнен при отправке назад.

1 голос
/ 10 декабря 2010

Как вы сказали, в Page_Load вы извлекаете исходное значение в текстовое поле, которое перезаписывает любые изменения.

Да, Page_Load ДЕЙСТВИТЕЛЬНО выполняется до нажатия кнопки (или любых других управляющих событий). Я предполагаю, что вы уже занимались разработкой Windows Forms, модель событий веб-форм ASP.Net совершенно иная. Ознакомьтесь с обзором жизненного цикла страницы ASP.NET .

1 голос
/ 10 декабря 2010

просто чтобы отследить ошибку, попробуйте поставить метку = (lblDescription.Text) и оставить остальную часть кода как есть, введите новое значение в текстовое поле (editdescription.text), попробуйте и скажите мне, что вы видите

 foreach (var d in detail) 
        { 
           lblDescription.Text = d.brand.Description; 
        } 
...