2011-02-12 4 views
0

jQuery를 사용하여 일부 비 서버 컨트롤 (일반 html 컨트롤)을 동적으로 업데이트 패널에 삽입합니다.서버가 아닌 컨트롤 및 부분적인 포스트 백

전체 포스트 백을 수행하는 경우 Request.Form을 사용하여 해당 컨트롤의 값을 얻을 수 있지만 부분적인 포스트 백을 수행 할 수는 없습니다.

부분적인 다시 게시 중에 html 컨트롤의 값을 가져올 수 있어야합니까? 또는 runat = "server"로만 제어 할 수 있습니까?

내가 facebox 및 파일 업로드 컨트롤을 가지고 놀고있는 중 서버가 아닌 컨트롤을 사용하고 있습니다.

답변

0

업데이트 패널은 비동기를 수행하는 효율적인 방법이 아닙니다.

이미 jQuery를 사용하고 있으므로 웹 서비스 (.asmx)를 프로젝트에 추가하고 해당 작업을 시작하십시오. 이 문서의 그림 4 근처를 참조하십시오. http://msdn.microsoft.com/en-us/magazine/cc163413.aspx

Request.Form은 컨트롤이 추가되지 않은 viewstate에서 작성됩니다.

+0

음에 당신은 내가이 상황에서 웹 서비스를 사용하는 것이 어떻게 설명 할 수 있습니까? 다른 부분에 웹 서비스를 사용하고 있지만 gridview도 렌더링 중이므로 간단하게 업데이트 패널에 배치하고 있습니다. – raydenl

+0

편집 됨, 링크 참조. – Emyr

+0

그게 완전히 정확하다고 생각하지 않습니다 ... Request.Form은 정상적인 HTTP 흐름에서받은 모든 변수를 반영합니다. Viewstate는 실제로 각 포스트 백을 통해 유지되므로 변수를 전달하는 변수 중 하나입니다. –

0

부분 포스트 백에서 원하는 양식 컨트롤이나 컨트롤의 모든 값을 가져올 수 있습니다. 그것은 사소한 대답이지만, 처음에는 직관적으로 명확하지 않습니다. 아마 ASP.net이 죽은 이유 일 것입니다.

__doPostback(string controlId,string param) 

의 매개 변수 문자열 것을 기억하고, ASP.net 방법

Request.Params.Get("__EVENTTARGET"); // id 
Request.Params.Get("__EVENTTARGET"); // parameter 

반환 문자열.

  1. 당신이 당신의 부분에 다시 보내려는 모든 양식 요소의 키 값 쌍과 자바 스크립트 객체를 구축에

    따라서 간단한 대답이다.

  2. 해당 개체를 문자열화한 다음 __doPostBack 호출의 두 번째 매개 변수로 전달하십시오.

서버 쪽에서는 개체와 원하는 모든 양식 값을 추출하기 위해이 프로세스를 간단히 되돌릴 수 있습니다. 예를 들어

:

var strigifiedObject = JSON.stringify(myFormObject); 
var id = "partialPostback"; 
__doPostBack(id, strigifiedObject); 

... 한편 서버 측

string id = Request.Params.Get("__EVENTTARGET"); 
string param = Request.Params.Get("__EVENTARGUMENT"); 

if (id == "partialPostback") { 
    List<MyObj> formVals = new JavaScriptSerializer().Deserialize<List<MyObj>>>(param); 
}