У меня есть элемент управления TextBox в форме, которая по-прежнему извлекает данные при отображении HTML-формы. Я попытался установить для AutoCompleteType значение «Нет», но я думаю, что он просто определяет, найдет ли он ранее введенные данные для этого поля, а не то, что фактически заполняет это поле ввода при загрузке страницы. Почему это текстовое поле будет тянуть данные? Это вызывает еще одну большую проблему. Этот TextBox находится внутри элемента управления (файл * .ascx). Он загружается из другого элемента управления динамически - не уверен, имеет ли это значение. Это происходит только в Mozilla Firefox. Когда я проверяю txtKeywords.Text в событии Page_Load элемента управления, который содержит TextBox, значение равно нулю. Таким образом, значение, очевидно, исходит из браузера, а не с сервера. Что вызвало бы это?
<asp:TextBox id="txtKeywords" runat="server" Width="125px" AutoCompleteType="None" autocomplete="False"></asp:TextBox>
Визуализированный HTML:
<input type="text" style="width: 125px;" autocomplete="False" id="ExplorerPageHtmlLeft_ctl01_txtKeywords" name="ExplorerPageHtmlLeft$ctl01$txtKeywords" gtbfieldid="77">
Код родительского элемента управления позади (элемент управления searchPanel1 содержит TextBox):
Private Sub Page_Load(ByVal sender As Object, _
ByVal e As EventArgs) _
Handles MyBase.Load
navigation1 = CType(LoadControl("ExplorerNavigation1.ascx"), ExplorerNavigation1)
searchPanel1 = CType(LoadControl("SearchPanel.ascx"), SearchPanel)
navigation2 = CType(LoadControl("ExplorerNavigation2.ascx"), ExplorerNavigation2)
Me.PlaceHolder1.Controls.Add(navigation1)
Me.PlaceHolder1.Controls.Add(searchPanel1)
Me.PlaceHolder1.Controls.Add(navigation2)
End Sub
После комментария Массимилиано Пелусо я не смог найти ни одного подозрительного JavaScript. Однако я заметил, что значение в этом поле ввода ВСЕГДА совпадает с идентификатором пользователя. Значение атрибута "gtbfieldid" в поле TxtUser всегда изменяется, когда я проверяю элемент в Firebug. Это поле TxtUser всегда отличается от нашего поля ввода txtKeywords. Они есть на разных страницах. И они, кажется, заполняются разными значениями каждый раз. Так что я не видел корреляции там. Я до сих пор не знаю, для чего этот атрибут. Этот атрибут не отображается в Internet Explorer, поэтому по какой-то причине его нужно вставить в Firefox.
<input type="text" id="TxtUser" name="TxtUser" gtbfieldid="37">
Благодаря вкладу Джонни # 5 мы доказали, что сервер не устанавливал этот текст. Это не ответ на мой вопрос, но это было очень полезно. Я установил точку останова в сеттере, и она не была вызвана. Только получатель получил вызов. Чтобы прояснить ситуацию, это пользовательский элемент управления веб-сервера (файл .vb), НЕ ЗАМЕДЛЯЕТСЯ с пользовательским элементом управления (файл .ascx, файл * .ascx.vb и иногда * .ascx.Designer. файл .vb). Я добавил событие Render в этот класс. Мне также пришлось импортировать 2 пространства имен. Следующее, что я хотел бы выяснить, - это способ расширить возможности браузера по установке текста в этом поле (через клиентскую часть), как мы это делали ниже для серверной части. Это было бы крутой методологией для такого рода проблем. Не уверен, что Firebug имеет такую возможность. Я до сих пор не знаю, что задает этот текст. Так что мой вопрос еще не решен.
Imports System.Web
Imports System.Web.UI.WebControls
Public Class MyTextBox
Inherits System.Web.UI.WebControls.TextBox
Public Overrides Property Text() As String
Get
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End Property
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.Render(writer)
End Sub
End Class
На моей странице, где я реализую этот пользовательский элемент управления веб-сервера, мне нужно зарегистрировать этот класс.
<%@ Register Assembly="Acu.LIMS.UI.Web" Namespace="Acu.LIMS.UI.Web" TagPrefix="MyTextBox" %>
<MyTextBox:MyTextBox id="txtKeywords" runat="server" Width="125px" AutoCompleteType="None" AutoComplete="False"></MyTextBox:MyTextBox>
Ну, я не сумасшедший! Это не код на стороне сервера, и это не код на стороне клиента, вызывающий это. Это Mozilla Firefox> Параметры> Безопасность> Запомнить пароль, вызывающий проблему. Но я все еще в замешательстве. : - \
На компьютере, вызвавшем проблему, я продолжал устанавливать этот флажок и не мог заставить браузер задать мне вопрос: «Вы хотите, чтобы Firefox запомнил ваш пароль?» (не помню точную формулировку). Но на другом компьютере меня сразу спросили. И когда я нажал «Запомнить» и перешел на эту страницу, в этом поле ввода отображается «x» (он же веб-элемент управления TextBox). И мое имя пользователя, и пароль оба обозначены буквой "x", поэтому я не уверен, что именно он вытягивает. Несмотря на значение, которое он извлекает, мой виновник TextBox не имеет ни идентификатора (идентификатора пользователя, ни пароля) в качестве идентификатора. Следующий вопрос: как Firefox определяет, когда следует вводить имя пользователя и пароль? Одна интересная вещь в этой форме состоит в том, что в другом поле есть текстовое поле пароля, но у меня нет ИД пользователя в этой форме. Интересно, Firefox помещает имя пользователя в первое найденное поле ??
=======================
Ответ
Поэтому я вставил фиктивное поле в элемент управления SearchPanel и угадаю, где указано мое имя пользователя. Я читал по этой ссылке о Mozilla Password Manager, и, очевидно, Mozilla использует свой интеллект для определения лучшего места для размещения идентификатор пользователя (иногда упоминается как имя пользователя). В моем случае у меня есть метка для имени пользователя (не идентификатора пользователя) в моем элементе управления аутентификацией, но я не хочу поле идентификатора пользователя. Поскольку пользователь уже вошел в систему, он не должен вводить какой-либо идентификатор пользователя. Вот почему метка имени пользователя находится перед полем пароля. Мы проводим аудит изменений в нашем приложении, поэтому мы используем его в приложении.
https://wiki.mozilla.org/Firefox%3aPassword_Manager
Итак, я сделал тест для проверки функциональности Mozilla. Я поместил другое фиктивное поле после более старого виновного TextField (с идентификатором "txtKeywords", чтобы его размещение было последним полем ввода, предшествующим полю ввода пароля. И предположил, где Mozilla Firefox поместил идентификатор пользователя? Да, в фиктивном TextBox / input Когда я отключаю опцию «Запомнить пароль для сайтов» в Mozilla> «Параметры»> «Безопасность», она не заполняется, и при этом мое поле пароля не заполняется. Так что это мой ответ. Думаю, сейчас я просто добавлю скрытое поле TextBox в моем элементе управления аутентификацией, поэтому Mozilla заполняет его, но не отображается.
Элемент управления SearchPanel.ascx:
<tr>
<td nowrap class="categoryverticalNav">
<asp:Label id="lblSearch" runat="server">Search</asp:Label><BR>
<asp:DropDownList id="ddlCategory" runat="server" Width="164px"></asp:DropDownList><BR>
<asp:TextBox id="txtKeywords" runat="server" Width="125px" AutoCompleteType="None" AutoComplete="False"></asp:TextBox>
<asp:TextBox id="TextBox1" runat="server" Width="125px" AutoCompleteType="None" AutoComplete="False"></asp:TextBox>
<asp:Button id="btnGo" runat="server" Width="28px" Text="Go" CausesValidation="False" />
</td>
</tr>
Да, помещение в скрытое поле ввода решило проблему. Я полагаю, что я мог бы либо вставить TextBox, но я просто выбрал поле ввода с помощью runat = "server" ... поскольку CLR не нужно взаимодействовать с ним в ASP.NET. После этого «x» (идентификатор пользователя) исчез из поля ввода txtKeywords элемента управления SearchPanel. : -)
<td>
<b><asp:Label ID="LblUserDisplayName" Runat="server" EnableViewState="False"></asp:Label></b>
</td>
<td>Password</td>
<td>
<input runat="server" type="text" style="display:none;">
<asp:TextBox id="TxtPassword" Runat="server" Width="80" EnableViewState="False" TextMode="Password"></asp:TextBox>
</td>