<HttpPost ()> не работает на моей странице просмотра - PullRequest
0 голосов
/ 27 января 2012

У меня есть две ссылки, например, для. Английский и испанский. Когда пользователь нажимает на английскую ссылку, он должен установить язык "английский" в сеансе.

Вот мой код aspx

<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>

и мой код класса контроллера выглядит следующим образом:

Public Class 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 запускается. из-за этого значение в сеансе не обновляется. Кто-нибудь может подсказать, почему это происходит?

Ниже приведен мой класс модели.

Namespace Home Открытый класс 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

1 Ответ

2 голосов
/ 28 января 2012

Мне кажется, что вы смешиваете код на стороне сервера и на стороне клиента.

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

Приведенная выше строка в JavaScript выполняется при первой загрузке страницы, которая ничего не печатает на странице. Если вы посмотрите на источник, вы не увидите ничего, кроме точки с запятой ;.

Когда вы нажимаете на ссылку, которая вызывает SetLanguageSpanish(), в этой функции ничего не выполняется, и страница направляется на '/'. Взгляните на страницу источника.

Редактировать

Вот обновленный код, который предоставит скрытый ввод с идентификатором «language» и значением, указанным параметром функции.

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>

JavaScript

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

VB.NET Я не парень VB, поэтому дважды проверьте синтаксис здесь

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

    HttpContext.Session("Language") = language

    'Do stuff

    Return this.View()
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...