Основная страница / страница содержимого и 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 для уникальной идентификации серверных элементов управления на стороне клиента путем добавления уникального ключа в качестве префикса к идентификатору элемента управления.

Другие вопросы по тегам