2009-04-29 5 views
4

자바 스크립트를 사용하여 클라이언트 측의 값을 편집하고있는 비활성화 된 TextBox가 있습니다. 서버 측에서 값을 검색하려고하면 클라이언트 측에서 변경 한 내용을 반영하지 않습니다. TextBox의 enabled 속성을 true로 설정하면 값을 검색 할 수 있지만 사용자가 포커스를두고 TextBox를 편집 할 수 있습니다.asp 값 가져 오기 : TextBox

사용자가 TextBox로 포커스를 이동하고 편집하지 못하도록하는 훌륭한 방법이 있습니까?

답변

5

브라우저는 다시 사용할 수 입력 컨트롤의 값을 게시하지 않습니다. 이 문제를 해결하는 가장 쉬운 방법은 양식 제출에 연결하고 양식을 제출할 때 입력을 다시 사용하는 것입니다. 사용자는 값을 수정할 기회가 없으며 나머지 요청과 함께 게시되어야합니다.

숨겨진 요소를 양식에 삽입하는 방법도 있습니다. 이것은 스크립트에 의해 유지되거나 표시된 값을 미러링하거나 위에 추가 된 것과 비슷한 방식으로 끝에 추가 될 수 있습니다.

+0

내가 뭘했는지는 롭이 제안한 것입니다.나는 asp : HiddenField를 페이지에 추가했다. JavaScript가 클라이언트 측의 TextBox 값을 변경하면 HiddenField 값도 변경됩니다. 그런 다음 HiddenField를 통해 서버 측에서 새 값에 액세스 할 수있었습니다. 그것은 여러 가지 복잡한 속임수이지만, 갈색 필드라고 부르는 이유입니다. – Slim

6

텍스트 상자의 ReadOnly 속성을 사용하십시오.

편집 : OP의 의견에 따르면, 이것은 아마도 트릭을하지 않을 것입니다.

편집 2 : DotNetSlackers에서 :

그래서이 두 속성의 차이는 왜 모두가 어떤 존재 야? 하나 심오한 간의 차이 두 개의 속성 사소한 차이 미묘한있다 : 두 속성이 서로 다른 마크 업을 방출

  1. 이. Enabled 을 False로 설정하면 TextBox는 렌더링 HTML에 특성 disabled = "disabled"를 주입합니다. ReadOnly 속성을 True로 설정하면 특성 readonly = "readonly"는 이 주입됩니다.
  2. HTML 양식의 W3C 사양에 따르면 사용하지 않는 컨트롤은 NOT "성공"이며 읽기 전용 컨트롤 인 은 "성공"일 수 있습니다. "성공한" 컨트롤은 이름/값 쌍인 이 POST 헤더 또는 쿼리 문자열을 통해 브라우저로 다시 전송됩니다. 따라서 비활성화 된 컨트롤은 읽기 전용 컨트롤은 사용자 에이전트의 에 따라 달라질 수 있지만 은 ASP.NET 페이지로 되돌려 보내지 않습니다. (내 테스트에서 모두 IE 6and 파이어 폭스 1.5은 읽기 전용 텍스트 상자 입력 함께 보낼 수 있습니다.)

......

당신이 ASP.NET 버전 1에서이 문제가 발생하면 .x 당신은 TextBox의 ReadOnly 속성이 이며 Enabled를 False로 설정하는 대신이를 사용했을 수 있습니다. 당신은 여전히 ​​ 페이지의 ViewState를 사용 중지하고 텍스트 상자 값은 읽기 전용 컨트롤의 양식 제출을 통해 다시 전송되기 때문에 프로그래밍 읽기 전용 텍스트 상자 웹 컨트롤의 텍스트 속성을 설정할 수 있습니다. 그러나 ASP.NET 버전 2.0에서는 Rick Strahlin 자신의 블로그 항목 인 ASP.NET 2.0 ReadOnly 동작 변경 에서 EnableViewState가 false 일 때 변경 사항이 조금만 변경됩니다. 2.0을 사용하면 TextBox 컨트롤의 ReadOnly 속성의 동작이 약간 변경되었습니다. .다시 게시가 발생했을 때

true로 설정된 읽기 전용 속성을 TextBox 컨트롤의 텍스트 값이 서버로 전송되지만 서버가 읽기 전용 텍스트 상자에는 처리를하지 않습니다 : 기술 문서에서. 이렇게하면 악의적 인 사용자가 읽기 전용 인 텍스트 값을 변경하지 못하게합니다. Text 속성의 값은 서버 측 코드에 의해 수정되지 않는 한 포스트 백 사이의 뷰 상태로 보존됩니다.

무슨 일 클라이언트가 양식 값을 통해 읽기 전용 텍스트 상자의 값에 따라 을 보내는이지만, 은 ASP.NET 2.0 엔진의 가치를 을 가지고 텍스트에 할당하지 않습니다 에 게시 할 때 TextBox의 속성은 악의적 인 사용자로부터 보호하기 위해 읽기 전용 TextBox 값 을 변경하는 것을 돕습니다. 그러나 여기에 이전의 문제가 있습니다. 값이 포스트 백에 지정되어 있지 않거나이 경우에는 이 무시되고 ViewState 이 비활성화되면 값이 손실됩니다. Eep. 보안 위험을 제기하고 문제를 도입;

Rick'sworkaround 단지 수동 요청에서 헤더 (본 .TextBox1.Text = 요청 [this.TextBox1.UniqueID])로 값을 읽을 수 있었다 그 2.0 주소. 최적의 접근 방식은 데이터베이스에서 값 (또는 읽기 전용 텍스트 상자에 대해 프로그래밍 방식으로 설정된 값을 처음으로 얻은 곳)입니다.

이 블로그 게시물의 도덕적는 데이터 읽기 전용 한 경우가 값을 다시받을 수 있는지 여부를 당신은 정말 를 중요하지 않습니다 를 사용하거나 사용하지 않거나 읽기 전용 형식을 필드를 수 있다는 것입니다 폼의 제출 양식 필드의 이 (가) 을 신뢰/사용하면 안되기 때문에 은 중요하지 않습니다. ! 읽기 전용 데이터가있는 경우 은 최종 사용자가 실수 할 수있는 데이터 스트림 에서 다시 읽지 않습니다! 당신이 발견 한 것처럼

Source

+0

텍스트 상자의 readonly 속성을 True로 설정하면이 속성은 계속 사용되지만 사용자 입력이 차단됩니다. – TheTXI

+0

ReadOnly를 false로 설정하면 enabled가 false로 설정됩니다. – Slim

+0

그렇다면 ReadOnly 속성에 대해 많은 존경심을 잃었습니다. – TheTXI