2009-09-24 5 views
2

먼저 내 질문의 불명확 한 제목에 대해 사과드립니다. 제목에서 내 문제를 간결하게 설명하는 방법을 잘 모르겠습니다. 숨겨진 필드가 null입니다! IsPostBack에 null이 아니고 IsPostBack에 없음

은 내가 페이지로드 이벤트 기간 동안이 필드의 값을 설정할

<input type="hidden" name="hid1" value="0" /> 

내에서 .aspx에 숨겨진 필드가 있고, 그렇지 않은 다시 게시됩니다.

protected void Page_Load(object sender, EventArgs e) { 
    if (!Page.IsPostBack) { 

     // This doesn't work! 
     Request.Form["hid1"] = "1"; 

    } 

    if (Page.IsPostBack) { 

     // This DOES work! 
     Request.Form["hid1"] = "1"; 

    } 
} 

문제는 다시 게시하지 때 요청이 페이지로드 이벤트 동안 폼 배열의 숨겨진 필드를 포함하지 않는다는 것입니다 (예 - 페이지가 히트를 처음). 이후의 페이지 히트 (즉, 포스트 백)는 숨겨진 필드가 들어있는 Form 배열이됩니다.

페이지의 수명주기와 관련이 있다고 확신하지만 실제로 알아야 할 내용은 페이지로드 이벤트 중에 숨겨진 필드를 설정하는 방법과 다시 게시가 아닌 경우 어떻게해야합니까?

편집 : 난 정말, 정말 runat = "server"특성 포함하지 않으려는 !

+0

밥 카우프만 (Bob Kaufman)이 맞습니다. 페이지가 다시 게시되지 않으면 요청과 함께 전송 된 양식 데이터가 없으므로'Request.Form'에는 키 "hid1"'이 채워지지 않습니다. – dlamblin

+0

그게 내가 생각한 것 뿐이야. – Jagd

답변

4

:이 값이 속성 값으로 설정되어있어 수 있도록

protected string HiddenFieldValue { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
      HiddenFieldValue = "postback"; 
     else 
      HiddenFieldValue = "not postback"; 
    } 

는 다음과 같이 숨겨진 양식 필드를 정의

<input type='hidden' id='hidden1' value='<%=HiddenFieldValue %>' /> 

만 값이 다시 게시 또는 비 다시 게시하는 동안 속성을 형성 설정하려는 경우 당신은뿐만 아니라 조건을 추가 할 수 있습니다

<input type='hidden' id='hidden1' value='<% if(IsPostBack) { %> <%=HiddenFieldValue%> <% } %>' /> 
+0

밤! 그랬어. 상자 밖에서 생각해 줘서 고마워, Venr. – Jagd

1

왜 입력 제어에서 'runat = "server"'를 설정하여 서버 제어로 설정하지 않습니까? 그런 다음 코드에서 액세스 할 수 있으며 첫 번째 페이지로드 중에 값을 설정할 수 있습니다.

+0

간단히 말해, 일부 JQuery 함수에서 숨겨진 필드를 사용해야하므로 runat = "server"로 인해 ID가 맹 글링되지 않도록하고 싶습니다. 다른 방법으로는 알 수 없지만이 방법을 사용하겠습니다.하지만 초기 페이지의 페이지로드에서 숨겨진 필드에 액세스하는 방법이 없다는 사실을 알게되면 매우 놀라워 할 것입니다. 히트. – Jagd

+1

@Jagd - 이것은 JQuery + ASP.NET의 위대한 두려움 중 하나입니다. 다음과 같이 id가 끝나는 것을 보는 관용구를 사용하십시오. startDatePicker = $ ("input [id $ = 'TextVisitStartDate']"). datepicker(); TextVisitStartDate는 asp.net TextBox 컨트롤입니다. –

+0

@Bob - 예, 그게 일반적으로 내가하는 일입니다. (id $ = '_ whatever'), 그러나 나는이 한 번을 벗어나려고 노력하고있었습니다. 물론 많은 일을하는 것처럼 보입니다. 그리고 나는 그것이 고통의 가치가 없다고 생각하기 시작했습니다. – Jagd

2

대신에 :

<input type="hidden" name="hid1" value="0" /> 

하면이 시도 :에서 다음

<asp:HiddenField runat="server" ID="hid1" /> 

당신의 Page_Load()

hid1.Value = "whatever..."; 

이 그것을 선언 할 때 그것은 전에 다시 게시 후 모두 볼 수 있습니다 방법.

+0

네가티브, 휴스턴. tomlog의 답변에 대한 제 응답을보십시오. 이것은 효과가 있지만 원하는 솔루션이 아닙니다. runat = mangled id의 – Jagd

+0

JQuery에 대해 잘 모르겠지만 ClientId 속성을 사용하면 JQuery에서 해당 ID를 사용할 수 있습니다. – Nirlep

1

왜 스타일 클래스를 통해 해당 필드에 액세스하고 runat server =?

당신은 당신의 페이지 클래스의 속성을 정의하고 코드에서 속성 값을 수정할 수
+0

스타일 클래스를 통해 액세스하는 것이 무슨 뜻인지 잘 모르겠습니다. 어떻게 그렇게 할 수 있는지 예를 명확하게 설명해 주시겠습니까? – Jagd

+0

@Jagd - 숨겨진 입력 요소에 임의의 클래스를 추가 할 수 있습니다.이 요소는 asp.net이 엉망이되지 않는 pseduo-id로 사용할 수 있습니다. 예 :'' 그런 다음 클래스 선택기 구문을 사용하여 Asp.Net의 생성 된 ID를 땀을 흘리지 않고 jQuery에서 액세스 할 수 있습니다. $ (".hid1"). function(). –

+0

아이디어가 있습니다. –