Основная страница / страница содержимого и Request.Form / Control Name
Недавно я изменил структуру веб-сайта, чтобы использовать главные страницы. Первая проблема заключалась в том, что весь javascript не работал, потому что все идентификаторы изменились, поэтому document.getElementById('id') мог найти идентификатор, потому что теперь идентификатор был ct100_something_id. Я исправил это с помощью ClientIDMode="Static", но теперь я обнаружил, что у меня есть другая проблема при обратной передаче, так как я использую Request.Form, и все атрибуты имени все еще изменяются на ct100_....
Насколько я вижу, здесь нет ClientNameMode, так как мне остановить asp.net от создания "причудливых" атрибутов имени. Я не могу явно установить атрибут имени на элементах управления сервера.
Просто для ясности:
Есть ли способ сделать это:
<asp:HiddenField runat="server" ID="hdnUsername" Value="" />
... представить как:
<input type="hidden" name="hdnUsername" id="hdnUsername" value="" />
... а не как:
<input type="hidden" name="ctl00$bodyContent$hdnUsername" id="hdnUsername" value="" />
?
2 ответа
Если вы получаете доступ к элементам управления, вам не нужно использовать Request.Form
и просто получить доступ к элементам управления напрямую. например this.TextBoxName.Text
Если это вам не поможет, то, что я сделал в прошлом, это создаю свою собственную TextBox
элемент управления, который изменяет атрибут имени в соответствии с атрибутом идентификатора при использовании ClientIdMode=Static
Если вы посмотрите мой блог http://timjames.me/modify-asp.net-textbox-name-attribute
Вот мой код, хотя это vb.net, поэтому вам нужно будет перейти на C#
Вы можете адаптировать это для HiddenFields
который бы тогда соответствовал вашим потребностям.
Public Class CleanNamesTextBox
Inherits TextBox
Private Class CleanNamesHtmlTextWriter
Inherits HtmlTextWriter
Sub New(writer As TextWriter)
MyBase.New(writer)
End Sub
Public Overrides Sub AddAttribute(key As System.Web.UI.HtmlTextWriterAttribute, value As String)
value = value.Split("$")(value.Split("$").Length - 1)
MyBase.AddAttribute(key, value)
End Sub
End Class
Protected Overrides Sub Render(writer As System.Web.UI.HtmlTextWriter)
Dim noNamesWriter As CleanNamesHtmlTextWriter = New CleanNamesHtmlTextWriter(writer)
MyBase.Render(noNamesWriter)
End Sub
Sub New(id As String, text As String, cssClass As String, clientIDMode As ClientIDMode)
MyBase.New()
Me.ID = id
Me.CssClass = cssClass
Me.ClientIDMode = clientIDMode
Me.Text = text
End Sub
End Class
Извините, это свойство ASP.net для уникальной идентификации серверных элементов управления на стороне клиента путем добавления уникального ключа в качестве префикса к идентификатору элемента управления.