Есть ли способ связать текстовые поля в веб-форме, чтобы данные сохранялись при вводе пользователем? - PullRequest
0 голосов
/ 13 июля 2009

У меня в веб-форме много ТБ, связанных со свойством в коде:

<asp:TextBox ID="tbFirstName" Text="<%# Contact.FirstName %>" runat="server" />
<script language="c#">
    public Contact Contact
    {
        get
        {
            return (Contact)ViewState["Contact"];
        }
    }
</script>
<script language="VB">
    Public ReadOnly Property Contact() As Contact
        Get
            return ViewState("Contact");
        End Get
    End Property
 </script>

Пока Contact это свойство.

Я хочу, чтобы, когда пользователь вставлял текст, он немедленно связывался с объектом «Контакт», например, когда пользователь нажимает клавишу или даже когда теряет фокус (TextChanged), это тоже хорошо.

Есть ли способ сделать это динамически (вместо того, чтобы вручную извлекать данные со всех ТБ и обновлять объект Contact)?

Я действительно хочу добиться двустороннего связывания данных с простыми текстовыми полями, размещенными в теле формы.

Примечание. Конечно, я не собираюсь хранить элементы в БД, я просто хочу объект (контакт), который находится в диспетчере состояний.

Ответы [ 2 ]

3 голосов
/ 13 июля 2009

Вы понимаете, что говорите о веб-приложении? Он работает в браузере пользователя. Чтобы обновить базу данных, вы должны совершить поездку в оба конца на сервер, либо через AJAX, либо через обратную передачу. Вы действительно хотите сделать это для каждого нажатия клавиши?


Из ваших комментариев видно, что вы не пытаетесь выполнить обратную запись в базу данных при каждом нажатии клавиши.

Тем не менее, привязка данных не работает таким образом. Привязка данных является чисто серверным действием в ASP.NET. Даже двусторонняя привязка данных, предоставляемая методом Bind, работает только при полной обратной передаче (хотя я признаю, что я не пробовал ее с UpdatePanel).

В качестве эксперимента создайте новую страницу и настройте двустороннюю привязку данных (см. «Использование FormView для более гибкого пользовательского интерфейса изменения данных» в Обзор вставки, обновления и удаления данных для примера). После того, как вы заработаете «нормально», попробуйте поместить FormView в UpdatePanel и посмотреть, работает ли Bind. Если так, посмотрите, сможете ли вы заставить UpdatePanel срабатывать при каждом нажатии клавиши.

2 голосов
/ 13 июля 2009

Хватит думать, будто вы разрабатываете настольное приложение! Потому что нет. Объект «Контакт» живет на сервере, в то время как текстовое поле «живет» на клиенте, обновление объекта сервера будет очень дорогостоящим, вам придется выполнять асинхронные передачи между сервером и клиентом с новыми данными и выполнять с такими короткими интервалами было бы невозможно. Думал, что вы можете добавить задержку в текстовое поле, после чего вы будете передавать данные на сервер. Зачем вам это нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...