2012-01-27 2 views
0

예를 들어 두 개의 링크가 있습니다. 영어와 스페인어. 사용자가 영어 링크를 클릭하면 세션에서 언어를 "영어"로 설정해야합니다. <HttpPost()> 내보기 페이지에서 작동하지 않습니다

다음

내 영문 코드

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<script type="text/javascript"> 
function SetLanguageSpanish() { 
    document.getElementById("Home_Language").value = 'Spanish'; 
     document.getElementById("frmHome").submit(); 
    } 
    function SetLanguageEnglish() {  
    /*var obj = document.getElementById("LangEnglish");*/ 
     //    <% Session("Language") = "English"%>; 
     document.getElementById("Home_Language").value = 'English'; 
     document.getElementById("frmHome").submit(); 
    } 
</script> 

<div class="vmenu"> 

<form id="frmHome" action="Home" method="post""> 

<a id="LangEnglish" href="/" onclick="SetLanguageEnglish();" >English</a> 
<a id="LangSpanish" href="/" onclick="SetLanguageSpanish();"> Spanish</a> 
<h3><%= Html.Label(Model.SubTitle) %></h3> 

<ul class="sbe"> 
    <li class="sbe"><a href="/test1"><%= Model.Menu1%></a></li> 
    <li class="sbe"><a href="/Test2"><%= Model.Menu2%></a></li> 
    <li class="sbe"><a href="/Test3"><%= Model.Menu3%></a></li> 
    <li class="sbe"><a href="/Test4"><%= Model.Menu4%></a></li> 
    <li class="sbe"><a href="/Test5"><%= Model.Menu5%></a></li>  
</ul> 

<input id="Home_PageName" name="PageName" type="hidden" value="" /> 
<input id="Home_Language" name="Language" type="hidden" value="" /> 

<input id="Home_PageTitle" name="PageTitle" type="hidden" value="" /> 
<input id="Home_SubTitle" name="SubTitle" type="hidden" value="" /> 

<input id="Home_Menu1" name="Menu1" type="hidden" value="" /> 
<input id="Home_Menu2" name="Menu2" type="hidden" value="" /> 
<input id="Home_Menu3" name="Menu3" type="hidden" value="" /> 
<input id="Home_Menu4" name="Menu4" type="hidden" value="" /> 
<input id="Home_Menu5" name="Menu5" type="hidden" value="" /> 

</form> 

</div> 

</asp:Content> 

하고 내 컨트롤러 클래스 코드는 다음과 같다 :

공용 클래스 HomeController 상속 System.Web.Mvc.Controller

' GET: /Home 
<OutputCache(Duration:=1800, VaryByParam:="none")> 
Function Index() As ActionResult 
    Try 
     Dim oHome As New Home.Home 
     Dim oHomeModel As New Home.HomeVM 

     If (HttpContext.Session("Language") Is Nothing) Then 
      HttpContext.Session("Language") = "English" 
     End If 

     oHomeModel.Language = HttpContext.Session("Language").ToString() 

     Return View("Index", GetCaption(oHomeModel)) 
    Catch ex As Exception 
     Return Nothing 
    End Try 
End Function 


<HttpPost()> 
<OutputCache(Duration:=1800)> 
Function Index(ByVal oHomeModel As Home.HomeVM) As ActionResult 
    Try 
     If ((oHomeModel.Language IsNot Nothing) Or (oHomeModel.Language.ToString() <> "")) Then 
      HttpContext.Session("Language") = oHomeModel.Language.ToString() 
     End If 
     Return View("Index", GetCaption(oHomeModel)) 
    Catch ex As Exception 
     Return Nothing 
    End Try 
End Function 

어떤 이유로 내보기 페이지의 링크를 클릭 할 때. Controller 클래스 get이 실행 중입니다. 이 때문에 세션의 값이 새로 고쳐지지 않습니다. 아무도 이것이 왜 일어나고 있는지 제안 할 수 있습니까?

다음은 내 모델 클래스입니다.

네임 스페이스 홈 공공 클래스 HomeVM는 서버 측과 클라이언트 측 코드를 혼합하는 것 나에게 보이는

'The following property are used as parameter 
    Public Property PageName As String 
    Public Property Language As String 

    'The following are the form caption peroperty 
    Public Property PageTitle As String 
    Public Property SubTitle As String 

    Public Property Menu1 As String 
    Public Property Menu2 As String 
    Public Property Menu3 As String 
    Public Property Menu4 As String 
    Public Property Menu5 As String 


End Class 

답변

2

.

<% Session("Language") = "English"%>; 

JavaScript에있는 위 라인은 페이지를 처음로드 할 때 실행되어 페이지에 아무 것도 인쇄하지 않습니다. 소스를 보면 세미콜론 ; 외에는 아무것도 볼 수 없습니다.

SetLanguageSpanish()을 호출하는 링크를 클릭하면 해당 함수에서 아무 것도 실행되지 않고 페이지는 '/'로 지정됩니다. 페이지 소스를 살펴보십시오.

편집 여기

는 ID가 "언어"와 함수 매개 변수에 의해 지정된 값으로 숨겨진 입력을 제출 일부 업데이트 된 코드입니다.

HTML

<form id="frmHome" method="post"> 
    <a href="#" onclick="SetLanguage('English');">English</a> 
    <a href="#" onclick="SetLanguage('Spanish');"> Spanish</a> 
    <input type="hidden" id="language" name="language" value="" /> 
</form> 

자바 스크립트

function SetLanguage(language) { 
    document.getElementById("language").value = language; 
    document.getElementById("frmHome").submit(); 
} 

내가 그렇게 더블 비주얼 베이직 사람이 여기 구문

<HttpPost()> 
<OutputCache(Duration:=1800)> 
Function Index(ByVal language As string) As ActionResult 

    HttpContext.Session("Language") = language 

    'Do stuff 

    Return this.View() 
End Function 
을 확인하고 있지 않다
VB.NET
+0

스크립팅 코드를 제거하더라도 여전히 게시되지 않습니다. –

+0

@VinodNair 사용자가 링크를 클릭 할 때'POST '를 눌러 선택한 언어를 변경할 수 있다고 말하는 것 같습니다. 그렇다면 첫 번째 문제는 링크이며 포스트 백이 발생하지 않는다는 것입니다. 함수에서 포스트 백을 발생 시키려면'document.getElementById ("frmHome"). submit();'을 사용할 수 있지만 게시하기 전에 제출할 값을 설정하여 서버에서 읽을 수 있도록하십시오. – Craig

+0

Can 당신은 내게 그것에 해결책을 제공합니다. 샘플 코드 –

관련 문제