modalpopupextender и запятые, появляющиеся в моем текстовом поле asp.net

Как все остальное: это зависит.

нет никакого жесткого правила относительно количества столбцов по сравнению с количеством таблицы.

, Если у Ваших клиентов должно быть несколько адресов, то отдельная таблица для этого имеет смысл. Если у Вас есть действительно серьезное основание нормализовать столбец City в его собственную таблицу, то это может пойти также, но я не видел, что прежде, потому что это (обычно) - поле свободной формы.

таблица А тяжелый, нормализованный дизайн эффективен с точки зрения пространства и выглядит "хорошим для учебника", но может стать чрезвычайно сложным. Это выглядит хорошим, пока Вы не должны делать 12 соединений для получения имени и адреса клиента. Эти проекты не автоматически фантастические с точки зрения производительности, которая имеет значение больше всего: запросы.

Избегают сложности, если это возможно. Например, если у клиента может быть только два адреса (не произвольно многие), то могло бы иметь смысл просто сохранять их всех в единственной таблице (CustomerID, Имя, ShipToAddress, BillingAddress, ShipToCity, BillingCity, и т.д.).

Вот сообщение Jeff по теме.

11
задан NibblyPig 19 October 2009 в 10:50
поделиться

7 ответов

По какой-то причине этого не происходит, если для текстового поля установлено значение ReadOnly.

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

Все еще немного беспорядочно, но я не могу вернуться к выпуску мая, потому что есть еще одна ошибка в этот выпуск с ComboBox, которого мне нужно избегать!


ОБНОВЛЕНИЕ:

В качестве фона у меня есть пользовательский элемент управления (ascx) внутри модального всплывающего окна, потому что мне нужно его повторно использовать. Ascx должен обрабатывать пользователя ' s input (содержащая страница не знает, что происходит внутри элемента управления), поэтому, когда пользователь нажимает кнопку, я выполняю обратный вызов и обрабатываю данные. Если клиентской функции обратного вызова возвращается успешный результат, я имитирую щелчок по кнопке «ОК», по мнению содержащейся на ней, которая фактически невидима для пользователя.

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

, тогда при передаче значений обратно в обратном вызове вместо получения значения txtName я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

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

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

, тогда при передаче значений обратно в обратном вызове вместо получения значения txtName я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

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

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

, тогда при передаче значений обратно в обратном вызове вместо получения значения txtName я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

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

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

, тогда при передаче значений обратно в обратном вызове вместо получения значения txtName я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

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

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

, тогда при передаче значений обратно в обратном вызове вместо получения значения txtName я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

тогда при передаче значений обратно в обратном вызове вместо получения значения txtName, я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

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

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

становится

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

тогда при передаче значений обратно в обратном вызове вместо получения значения txtName, я использую txtNameRO.

Я не думаю, что это поможет, если вы выполняете обратную передачу, но вы можете добавить обратный вызов перед обратной передачей, как я. Надеюсь, это все равно кому-то поможет!

1
ответ дан 3 December 2019 в 05:34
поделиться

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

С уважением, Тобиас

2
ответ дан 3 December 2019 в 05:34
поделиться

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

Подключение к TextBox.Text установщику показало, что поврежденные данные поступают из сбора постданных. Это означает, что непосредственно перед обратной передачей ModalPopupExtender повреждает данные.

PS Я использую не UpdatePanel, а обычную панель, поэтому нет триггеров, связанных с кнопками.

Обновлено: Решение найдено.

Проблема кажется исчезнуть при откате к майскому выпуску AjaxToolKit ( http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27326 ).

4
ответ дан 3 December 2019 в 05:34
поделиться

Я успешно реализовал полный взлом, основанный на ответе Джен. Я использую asp: HiddenField для хранения значения, которое я хочу отправить обратно, и заполняю его полем ввода в чистом HTML

<asp:HiddenField ID="txt" runat="server"/>
<input type="text" onchange='document.getElementById("<%= txt.ClientID %>").value = this.value;' />

. Это легче, чем решение Jen, поскольку вы все еще отправляете обратно только один серверный элемент управления.

Кстати, это очень серьезная ошибка в Ajax Toolkit. Вы можете проголосовать и прокомментировать это здесь:

Проблема с CodePlex

Представьте, что вы находитесь в Чикаго. Голосуйте досрочно, голосуйте чаще.

0
ответ дан 3 December 2019 в 05:34
поделиться

Для меня решением было убрать модальный пакет с главной панели обновлений. Как только я это сделал, запятые исчезли. Если вам действительно нужна панель обновления внутри модального всплывающего окна, создайте свою собственную внутри этой панели.
Мне не нужно было возвращаться к предыдущей версии инструментария.

0
ответ дан 3 December 2019 в 05:34
поделиться

I уже день пытаюсь решить эту проблему, и один очень услужливый человек в моем офисе придумал потрясающее решение!

Мы переместили ModalPopUpExtender и последующую всплывающую панель, управляемую расширителем, за пределы самой внешней UpdatePanel на странице, создали поддельную кнопку и передали идентификатор поддельной кнопки свойству TargetControlID ModalPopUpExtender.

<asp:Button runat="server" ID="dummyButton" CausesValidation="false" Style="display: none" />

<cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="dummyButton" CancelControlID="CancelPopUp" PopupControlID="PanelID" BackgroundCssClass="modalBackground" />

Внутри моих форм / страницы, где раньше находились расширитель PopUp и панели, я создал событие OnClick для кнопки, которую мы использовали для запуска ModalPopUpExtender.

<asp:ImageButton ID="ButtonID" runat="server" Text="Add" ImageUrl="~/Images/Add-32-1-small.png" OnClick="LoadPopUp" />

На моей кнопке, которая запускает ModalPopUpExtender, я создал событие OnClick под названием «LoadPopUp» - в LoadPopUp в коде позади я просто поместил ModalPopUpExtender1.Show ();

protected void LoadPopUp(object sender, EventArgs e)
{
  ModalPopupExtender1.Show();
}
0
ответ дан 3 December 2019 в 05:34
поделиться

Я также нашел форум, указывающий на то, что это может быть стандартным поведением html, когда на форме есть несколько элементов управления с одинаковым именем. Учитывая это (и предполагая, что это ошибка в ajax элементах управления), я решил обойти эту проблему, добавив в Page_Load следующее утверждение для каждого из моих textbox'ов.

string[] vals = txtValue.Text.Split(Convert.ToChar(",")); txtValue.Text = vals[vals.Length - 1];//Получается, что мое последнее значение всегда было в последнем элементе

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

3
ответ дан 3 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: