2010-03-01 2 views
5

저는 Master Pages를 사용하고 있으며 Google Checkout이 기대하는 이름을 사용하여 양식에 숨겨진 텍스트 상자를 동적으로 추가하려고합니다. VB.NET을 사용하여마스터 페이지를 사용할 때 특정 이름을 태그에 어떻게 할당합니까?

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

, 나는 다음과 같은 코드를

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

을 실행하지만 마스터 페이지를 사용하기 때문에, 제어는 "ctl00 $ ITEM_NAME_1"로 이름이 변경됩니다. 나는 또한 Name 속성 (hidName.Name = "item_name_"& count.ToString)을 설정하기 위해 노력하고

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

참고 특성 목록에 이름을 추가했습니다. 이상하게도 이름 속성에 아무런 영향을 미치지 않았습니다. 마스터 페이지를 사용하지 않을 때 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.ControlClientIDMode라는 속성이 있습니다.
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에서만 사용할 수 있습니다. –

+0

@Chad 네. 닷넷 프레임 워크 4.0에서 소개되었습니다. 나는 그 답을 더 완전하게 고쳐 주었다. 고마워. – tiago2014

관련 문제