2010-11-25 3 views
1

ASP.NET MVC 사용하여 웹 페이지를 만들고있어. 나는 다음과 같은 입력 definied 숨겨진 :숨겨진 된 컨트롤 입력 포스트 백간에 자신의 값을 유지하지 않습니다

<%=Html.Hidden("inputHiddenSelectedMenuId") %> 

그리고이 기능 JS에서 내가 값을 설정 : 내가 설정 한 값을 사용하려는 JS 초기화 기능에 포스트 백을 후

function SetSelectedMenu(id) { 
    $('#inputHiddenSelectedMenuId').val(id);   
} 

숨겨진 입력에서 값은 빈 문자열입니다.

$(document).ready(function() { 

    $('div.nav > a').removeClass('active'); 
    var id = $('#inputHiddenSelectedMenuId').val(); 
    if (id != "") { 
     $("#" + id).addClass('active'); 
    }   
}); 

아무도 이유가 무엇인지 알 수 있습니까?

+0

MVC는 포스트 백을 지원하지 않습니다. 문제의 원인 일 수 있습니까? WebForms 또는 MVC를 사용하고 있습니까? –

+0

포스트 백은 표준 HTML 작업입니다. 포스트 백은 웹 양식과 독점적 인 것이 아니며, 웹 양식 포스트 백에는 viewstate라는 숨겨진 필드가있어 포스트 백간에 데이터를 유지할 수 있습니다. 게다가, 그는 자바 스크립트에서 다시 게시 후 데이터를 읽으려고하고있다 생각합니다. 내 대답을 참조하십시오. – Chev

+0

필드가 (코드의) 포스트 백에 재설정 될 수있는 이유가 있습니까 – Prescott

답변

2

자바 스크립트에서 입력 값을 읽으려고합니다. 양식의 단추를 클릭하면 페이지가 다시로드되고 페이지가로드 될 때마다 javascript가 다시 실행됩니다. 모두 자바 스크립트에서 입력 값을 읽는 중이라면 다시 게시를 수행 할 필요가 없습니다.

$('#inputHiddenSelectedMenuId').bind('click', function() 
{ 
    var id = $('#inputHiddenSelectedMenuId').val(); 
    // do stuff with it. 
}); 

클릭 기능은 포스트 백없이 수행됩니다.

이제 게시 후 MVC 내에서 숨겨진 필드의 내용을 읽으려고하면이 문제가 달라집니다. 모델 바인딩을 통해 양식 데이터에서 가져 오거나 직접 Request.Form [] 컬렉션을 통해 읽어야합니다.

public ActionResult SomeActionToPostTo(int inputHiddenSelectedMenuId) 
{ 
    //model binding should find the form field called inputHiddenSelectedMenuId and populate the argument in this method with it's value. If it's not an integer then just change the type of the argument to the appropriate type. 
} 
+0

링크를 누른 후에 무엇을하고 싶습니까? 다시 게시가 이루어지면 클래스를 lin로 설정합니다. k ID가 숨겨진 필드에 저장됩니다. –

+0

그럴 경우 A) Ajax로 포스트 백을 수행하십시오. 또는 B) 다음에로드 할 때 프로그래밍 방식으로 뷰에 추가 할 ViewData 컬렉션에 자바 스크립트를 다시 보냅니다 ('ViewData [ "someJavaScript"] .ToString()'). – Chev

관련 문제