2011-02-03 3 views
1

ASP.NET 사이트에 통합하라는 일부 JavaScript를 상속 받았습니다. 나는 이것이 간단 할 것이라고 생각했지만 약간의 어려움이되고있다.JavaScript를 통해 ASP.NET에서 숨겨진 필드 업데이트

코드는 다음과 같은 : 목표는 ASP.NET에이 HTML 컨트롤의 값 자체가 동적으로 자바 스크립트의 또 다른 덩어리에 의해 생성되는 그러나이 컨트롤을 얻을 수 있습니다

<SELECT id="Question1" name="Question" onchange="updateQuestion();">     
<OPTION value="notChosen">--Please Select One--</OPTION> 
<OPTION value="in">India</OPTION> 
<OPTION value="de">Germany</OPTION>      
<OPTION value="fr">France</OPTION>     
<OPTION value="us">United States</OPTION>      
<OPTION value="ch">Switzerland</OPTION>     
</SELECT> 

, 그래서 이 asp.net 컨트롤을 변경할 수 없습니다. 내 솔루션은 onchange = "updateQuestion();" 방법은이 다음 SELECT 태그를 취할와 ASP.NET 컨트롤에 값을 배치합니다 JS :

function updateSecQ() { 
    var sQuestion = document.getElementById('<%=sQuestion.ClientID%>'); 
    sQuestion.Value = ""; 
    var questions = document.getElementsByName('Question'); 
    for (question in questions) { 
     if (questions[question].value != null) 
      sQuestion.Value += questions[question].value + ","; 
    } 
    alert(sQuestion.Value); 
} 

당신이 볼 수 있듯이, 그는 ASP.NET 컨트롤을 업데이트 찾고 : <asp:HiddenField ID="sQuestion" runat="server" value="" />

이 나타납니다 모든 작업, 그러나 내가 양식에 서버 쪽을 이동하면 sQuestion.Value 여전히 = ""볼 수 있습니다.

나는 여기에 무슨 잘못을했는지 모르겠다. 어떤 입력이라도 크게 감사 할 것입니다. 시간 내 주셔서 감사합니다.

+0

페이지 수명주기의 어느 부분에서 sQuestion.Value를 읽으려고합니까? –

답변

7

Dunno about ASP.net하지만 브라우저 DOM에서 숨겨진 필드의 값은 Value가 아닌 값이 모두 소문자입니다. 브라우저가 제출할 값 속성이며 sQuestion.Value를 설정하면 제출 된 값을 설정하지 못했습니다.

+0

+1 좋은 장소! @Dio Javascript는 아직 정의되지 않은 경우 즉시 새 객체를 만듭니다. 유용하지만 위험합니다! http://www.w3schools.com/js/js_objects.asp –

+0

잘자요. 경고가 이제 빈 문자열이 되었기 때문에 분명히 다른 오류가 있지만 분명히 알 수 있습니다. 정말 감사. – Dio

+0

... 여전히 sQuestion.Value에 경고하고 있습니까? 또는 getElementsByName이 아무것도 반환하지 않습니다. 아니, 내가 선택한 것을 보았다. 질문 [질문] .selectedIndex] .value - 몇 가지 임시 변수로 합리화 할 수 있습니다 ... –

2

JavaScript가 동일한 aspx 페이지에 있습니까? 그렇지 않으면 그럴 것입니다.

var sQuestion = document.getElementById('<%=sQuestion.ClientID%>'); 

이 실패합니다. 당신이 jQuery를 사용하는 경우

당신은 사용할 수 있습니다

$("[id *= 'substringOfTheASPId']").val("new value") 
+0

좋은 제안. 아마도 OP는 함수가 작동한다고하지만 스크립트는 aspx 페이지에 있습니다. –

0

대신 sQuestion.value의 sQuestion.Value을 설정합니다.

나는 이것을 비슷한 질문으로 an answer에서 발견했습니다.

0

.NET에서는 HiddenField 값이 클라이언트 측에서 조작 될 것으로 기대하지 않으므로 항상 매번 ViewState 값을 읽습니다. 당신은 정기적으로 숨겨진 입력을 사용하고이 같은 "RUNAT"속성을 추가하여 그것을 서버 컨트롤을 할 수 있습니다 :

<input type="hidden" id="myInputId" runat="server" /> 

을 코드에서 뒤에, 당신은 당신이 위에있는 것과 유사한 방식으로 값을 읽을 수 있습니다. System.Web.UI.HtmlControls.HtmlInputHidden 유형이됩니다.

관련 문제