2011-02-11 3 views
16

asp:ListView의 ClientIDMode가 Predictable로 설정되어 있습니다. 그 ItemTemplate은 asp:textbox을 포함합니다.asp.net 4.0 : INPUT의 이름에 대해 ClientIDMode가 있습니까?

I가 그것을 기대하지만, name 여전히 AutoID 스타일의 알고리즘 모양을 사용하고 그것으로 텍스트 상자의 ID는 역할 : 날의 이름을 야기 할 수있는 방법이

<input name="lvFields$ctrl0$tbVal" id="lvFields_tbVal_somekey" type="text"/> 

있는가 ID와 같은 역할을하는 입력은 무엇입니까? :)

다음 질문에 답변

(편집은 입력 요소 Name는 게시 두 요소를 교환 (예 ListView에 바인드되는리스트를 변경하는 경우, 그래서 POST 데이터에 무엇이며 프레임 워크는 Name을 기반으로 프레임을 연관시키고 ID을 기반으로하지 않기 때문에 텍스트 상자의 값은 잘못된 키와 연결됩니다.

+0

를 사용하여 왜'Predictable'로 이름을 필요합니까? –

+1

'ID'가 이미 '예측 가능'인 경우 이름이 필요합니까? – Oded

+1

JavaScript에서 라디오 버튼 세트의 선택된 값을 반환하려는 경우 한 가지 이유가있을 수 있습니다. 프론트 엔드 JS/HTML 디자이너와 백엔드 프로그래머가 있다면 프런트 엔드 프로그래머는 DOM 요소의 이름을 참조하는 것이 한계에 미치지 못한다는 것을 이해해야합니다. 추한 것 외의 다른 이름이 예기치 않게 변경 될 수 있기 때문입니다 . –

답변

0

내가 아는 한, 입력 요소의 이름을 변경할 방법이 없습니다. 이름은 UniqueID 속성에 해당합니다. UniqueID 속성은 시스템에서 생성되며 사용자가 제어 할 수없는 속성입니다. 컨트롤 ID 만 사용하여 원하는 것을 얻을 수있는 방법을 찾아야합니다.

0

두 이름 모두 예측 가능한 패턴을 사용하고 있습니다. 원래, 이름도 ct100_ct100과 같았습니다. 내가 보는 것에서 그것은 예측 가능한 이름입니다. 클라이언트 ID 값은 컨트롤 접두사 사이에 항상 _을 사용하고 고유 ID (name attrib)는 항상 $를 사용합니다. 두 개는 항상 일치합니다 (그룹에 라디오 버튼 목록 사용).

HTH.

0

나는 똑같은 문제를 한 번 겪었으며 "System.Web.UI.Control"에서 노출 된 이러한 속성 중 하나를 사용하여 서버 측에서 클라이언트 측 제어 이름을 가져야했습니다.

특히, 이러한 속성으로 주위 재생 및 구성 "이름"서버에 자신 쪽면 나는 당신이 이름을 변경할 수 없습니다 확신으로 Request.Form ("NameHere")

Me.ClientIDSeparator 
Me.IdSeparator 
Me.UniqueID 
1

를 사용 ClientIDMode를 수정할 때. 또는 Title 속성을 추가 할 수 있습니다. VS는이를 서버 측 코드에서 알 수없는 것으로 플래그하지만 HTML에서 올바르게 렌더링합니다. 일부 클라이언트 측의 조작을하고 있다면, 당신은 같은 입력을 처리 할 수 ​​있습니다

<script type="text/javascript"> 
$(document).ready(function() { 
$('input:text[title="TextBoxName"]').datepicker(); 
}); 
</script> 
다음과 같은 포스트의 방법을 사용하지만 약간 수정하여 입력의 이름을 변경할 수 있습니다
2

:

난 그냥 몇 가지 컨트롤에 대한 HTML의 모든 권한을 원하는대로

how to remove 'name' attribute from server controls?

은 내가 Page 컨트롤의 RenderChildren 방법을 통해-타고 :

protected override void RenderChildren(HtmlTextWriter writer) 
{ 
    var unScrewNamesRender = new RenderBasicNameHtmlTextWriter(writer); 
    base.RenderChildren(unScrewNamesRender); 
} 

private class RenderBasicNameHtmlTextWriter : HtmlTextWriter 
{ 
    public RenderBasicNameHtmlTextWriter(TextWriter writer) : base(writer) { } 

    public override void AddAttribute(HtmlTextWriterAttribute key, string value) 
    { 
     if (key == HtmlTextWriterAttribute.Name && value.Contains("POLine")) 
     { 
      value = value.Substring(value.LastIndexOf("$") + 1); 
     } 

     base.AddAttribute(key, value); 
    } 
} 

당신이 이것을 시도하면 무엇을하는지 알아야 할 필요가 있습니다. WebForms는 컨트롤이 없어서 포스트 백에서 사용할 수 없다고 생각합니다. 내 목적을 위해, .Net Ajax 컨트롤을 다루지 않고 서버 또는 클라이언트 측에서 임의의 수의 여러 줄을 추가하려는 경우 제대로 작동합니다.

0

JQuery와 솔루션

function removeNameAttribute() { 
      $('input, select').each(function() { 
       $(this).removeAttr("name"); 
      }); 
     } 
0

//이 HtmlGenericControl

HtmlGenericControl input = new HtmlGenericControl("input");`` 
input.ID = "lvFields_tbVal_somekey"; 
input.Attributes.Add("name", "tbVal"); 
input.Attributes.Add("type", "text"); 
input.ClientIDMode = ClientIDMode.Static;