2012-05-17 3 views
1

Недавно я изменил структуру веб-сайта, чтобы использовать мастер-страницы. Первая проблема заключалась в том, что весь javascript не работал, потому что все идентификаторы изменены, поэтому document.getElementById ('id') может найти идентификатор, потому что теперь id был ct100_something_id. Я установил это с помощью ClientIDMode = «Static», но теперь я обнаружил, что у меня есть другая проблема при обратной передаче, поскольку я использую Request.Form, и все атрибуты имени по-прежнему меняются на ct100 _....Главная страница/страница контента и имя Request.Form/Control

как я вижу, нет ClientNameMode, поэтому как остановить asp.net от создания «причудливых» атрибутов имени. Я не могу явно указать атрибут name на элементах управления сервером.

Просто для уточнения:

Есть ли способ сделать это:

<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="" /> 

?

+0

Он добавляет префикс, так что не будет ID столкновения между элементами управления в Masterpage и управлением на страницах – Shai

+1

контента при создании элементов управления динамически можно еще Р.Х. ClientIDMode = Static тем контролирующих –

+0

вы должны использовать document.getElementById ('<% = TextBoxName.ClientID% /'). это позволит получить идентификатор клиента asp.net, сгенерированный –

ответ

-1

К сожалению, это свойство ASP.net однозначно идентифицирует серверные элементы управления на стороне клиента, добавляя уникальный ключ в качестве префикса к идентификатору элемента управления.

+0

. Он спрашивает, как заставить его перестать добавлять префикс ключа к свойству NAME, а не идентификатор – mikeschuld

0

Если вы обращаетесь к элементам управления, вам не нужно использовать 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 
Смежные вопросы