2010-03-01 14 views
5

Utilizzo pagine master e sto aggiungendo dinamicamente caselle di testo nascoste nel modulo con i nomi che si aspettano da Google Checkout.Come si assegna un NOME specifico a un tag quando si utilizzano le pagine master?

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

Utilizzando VB.NET, eseguo il seguente codice

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

Ma perché io uso pagine master, il controllo viene rinominato "ctl00 $ item_name_1".

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

Nota che ho cercato di impostare la proprietà Nome (hidName.Name = "item_name_" & count.ToString) ed anche cercato di aggiungere il nome nella lista Attributi. Questo stranamente non ha avuto alcun effetto sull'attributo name. Quando non utilizzo le pagine master, noto che quando imposto la proprietà ID, a NAME viene automaticamente assegnato lo stesso valore.

C'è un modo per controllare il nome di un controllo aggiunto in modo dinamico quando si utilizzano le pagine master?

risposta

0

Sfortunatamente, la risposta semplice è No. La risposta più difficile è Sì, ma non in modo diretto. Una soluzione non è di tentare di impostare la proprietà ma invece definire il nome di un attributo:

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 ha una proprietà chiamata ClientIDMode.
Invece di HtmlInputHidden, è possibile utilizzare uno 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) 

Vedi Making text box hidden in ASP.NET e HiddenField Class.

Il ClientIDMode è stato introdotto nel .Net Framework 4.0.
Per le versioni precedenti, un'alternativa potrebbe essere l'aggiunta di 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 è disponibile solo in asp.net Webforms 4.0, credo. –

+0

@Chad Sì, è stato introdotto in .Net Framework 4.0. Ho rivisto la risposta per essere più completa, grazie. – tiago2014

Problemi correlati