2010-03-01 82 views
5

我正在使用母版页,并且我正在使用Google Checkout预期的名称在表单上动态添加隐藏文本框。如何在使用母版页时将特定的NAME分配给标签?

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

使用VB.NET,我执行下面的代码

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

但因为我用的母版页,控制更名为 “ctl00 $ ITEM_NAME_1”。

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

请注意,我试图将Name属性设置(hidName.Name =“item_name_” & count.ToString),并试图将名称添加到属性列表。这奇怪地对名称属性没有任何影响。当我不使用母版页时,我注意到当我设置ID属性时,NAME会自动分配相同的值。

当您使用母版页时,是否有办法控制动态添加的控件的名称?

回答

0

不幸的是,简单的答案是否定的。更难的答案是肯定的,但不是直截了当的方式。一种解决方法是,不要试图设置属性,而是定义名称作为一个属性:

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有一个名为ClientIDMode属性。
而不是HtmlInputHidden,您可以使用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) 

Making text box hidden in ASP.NETHiddenField Class

ClientIDMode是在.Net Framework 4.0中引入的。
对于早期版本,替代方案可能是添加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仅在asp.net webforms 4.0中可用,我相信。 – 2011-02-24 04:59:36

+0

@Chad是的,它是在.NET Framework 4.0中引入的。我修改了答案更完整,谢谢。 – tiago2014 2011-02-24 05:31:01

相关问题