2010-03-01 25 views
5

Estoy utilizando páginas maestras y estoy tratando de agregar dinámicamente cuadros de texto ocultos en el formulario con los NAME que Google Checkout espera.¿Cómo se asigna un nombre específico a una etiqueta cuando se utilizan páginas maestras?

<input name="item_name_1" type="hidden" value="Widget #1"/> 

El uso de VB.NET, que ejecute el siguiente código

'Name 
Dim hidName As New HtmlInputHidden 
hidName.ID = "item_name_" & count.ToString 
hidName.Value = item 
Form.Controls.Add(hidName) 

Pero porque yo uso las páginas principales, el control se cambia el nombre a "ctl00 $ ITEM_NAME_1".

<input name="ctl00$item_name_1" type="hidden" id="ctl00_item_name_1" 

Nota que he tratado de establecer la propiedad Nombre (hidName.Name = "item_name_" & count.ToString) y también trató de añadir el nombre de la lista de atributos. Esto extrañamente no tuvo ningún efecto en el atributo de nombre en absoluto. Cuando no estoy usando páginas maestras, noto que cuando configuro la propiedad ID, a NOMBRE se le asigna automáticamente el mismo valor.

¿Hay alguna manera de controlar el nombre de un control agregado dinámicamente cuando usa páginas maestras?

Respuesta

0

Desafortunadamente, la respuesta simple es No. La respuesta más difícil es Sí, pero no de una manera directa. Una solución no es tratar de establecer la propiedad pero en lugar de definir el nombre como un atributo:

Dim hidName As New HtmlInputHidden 
hidName.Attributes("Name") = "item_name_" & count.ToString 
hidName.Value = item 
Form.Controls.Add(hidName) 
1

System.Web.UI.WebControls.Control tiene una propiedad llamada ClientIDMode.
En lugar de HtmlInputHidden, puede usar HiddenField.

'Name 
Dim hidName As New System.Web.UI.WebControls.HiddenField 
hidName.ID = "item_name_" & count.ToString 
hidName.ClientIDMode = System.Web.UI.ClientIDMode.Static 
hidName.Value = item 
Form.Controls.Add(hidName) 

Ver Making text box hidden in ASP.NET y HiddenField Class.

El ClientIDMode se introdujo en .Net Framework 4.0.
Para versiones anteriores, una alternativa podría ser agregar asp:Literal.

'Name 
Dim hidName As New System.Web.UI.WebControls.Literal 
hidName.Text = _ 
    String.Format("<input name=""item_name_{0}"" type=""hidden"" value=""{1}""/>", _ 
       count, item) 
Form.Controls.Add(hidName) 
+0

ClientIDMode solo está disponible en asp.net webforms 4.0, creo. –

+0

@Chad Sí, se introdujo en .Net Framework 4.0. Revisé la respuesta para ser más completo, gracias. – tiago2014

Cuestiones relacionadas