Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Народ Подскажите пожалуйста?


Автор: JaguarSmith 16.1.2005, 20:09
В моем небольшом пректе(веб-страничка) есть код, который должон использоваться на каждой странице проекта, но я так и не могу разобраться как мне сделать эту процедуру доступной из отдельного модуля... приходится вставлять его в обработчик каждой страницы что и неудобно и не правильно... smile

пытался засунуть его в отдельный модуль с объявлением прцедуры как Public но тогда он говорит что request, response и session являются "необьявленными"...

хорошо обьявляю :
Код

       Dim session As System.Web.SessionState.HttpSessionState
       Dim response As System.Web.HttpResponse
       Dim request As System.Web.HttpRequest


компилятор это "съедает" но .NET Framework выдаёт:
В экземпляре объекта не задана ссылка на объект.

Что делать то?
И как правильно?

Помогите чайнику -я давно не програмил а тут уселяся сразу за vb.NET... smile

приводю мой код:

Код

Sub avatar_cookieng()


       Dim Cookieing As HttpCookie

       Dim p, ins, k, v As String

       Cookieing = request.Cookies.Item("UserInfo")


       Try
           ins = Cookieing.Values("Registered")
       Catch S As System.NullReferenceException

           session("Return2") = CStr(request.Url.AbsoluteUri)

           response.Redirect("Detect.aspx")


       End Try

       session("UID") = Cookieing.Values("UserID")
       session("UMail") = Cookieing.Values("UserMail")
       session("IsRegd") = Cookieing.Values("Registered")


       If Cookieing.Values("FloatHead") = "True" Then ' Определяет плавает ли заголовок
           session("FloatHead") = "True"
           session("BodyStyle") = "scrollbar-face-color : #990099; scrollbar-arrow-color : Yellow; scrollbar-3dlight-color: #9400D3; scrollbar-base-color: #990099;" _
                                + " scrollbar-track-color: #B875D8; scrollbar-shadow-color: #9400D3; scrollbar-highlight-color: #8B008B; page: inherit; " _
                                + "scrollbar-darkshadow-color: Black; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; overflow: hidden;"
           session("MainStyle") = "scrollbar-face-color : #990099; scrollbar-arrow-color : Yellow; scrollbar-3dlight-color: #9400D3; scrollbar-base-color: #990099;" _
                                + " scrollbar-track-color: #B875D8; scrollbar-shadow-color: #9400D3; scrollbar-highlight-color: #8B008B; ime-mode: active; bottom: auto; page: inherit;" _
                                + "scrollbar-darkshadow-color: Black; position: relative; top: 2px; left: 0px; width: 100%; height: inherit; overflow: auto; text-align: center; quotes: inherit;"
       Else
           session("FloatHead") = "False"
           session("BodyStyle") = "scrollbar-face-color : #990099; scrollbar-arrow-color : Yellow; scrollbar-3dlight-color: #9400D3; scrollbar-base-color: #990099;" _
                                + " scrollbar-track-color: #B875D8; scrollbar-shadow-color: #9400D3; scrollbar-highlight-color: #8B008B; " _
                                + "scrollbar-darkshadow-color: Black; font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 12px; overflow: auto;"
           session("MainStyle") = "scrollbar-face-color : #990099;  scrollbar-arrow-color : Black; text-align: center;"
       End If

       If Cookieing.Values("TextWidth") <> Cookieing.Values("null") Then ' Определяет плавает ли заголовок
           session("TextWidth") = Cookieing.Values("TextWidth")
       Else
           session("Return2") = CStr(request.Url.AbsoluteUri)
           response.Redirect("Detect.aspx")
       End If

       Select Case Val(Cookieing.Values("ResX"))
           Case Is < 1600
               session("BodyStyleFile") = "Texts_0.css"
           Case Is >= 1600
               session("BodyStyleFile") = "Texts_2.css"
       End Select

   End Sub

Автор: Kurt 17.1.2005, 04:10
Самое простое, на мой взгляд, решение - передавать эти несчастные session, response и request как входне параметры в Вашу процедуру. По ссылке, конечно же.
Т.е. не объявлять их в теле процедуры как
Код

Dim session As System.Web.SessionState.HttpSessionState
Dim response As System.Web.HttpResponse
Dim request As System.Web.HttpRequest


а просто описать Вашу процедруру как

Код

Sub avatar_cookieng(session As System.Web.SessionState.HttpSessionState, response As System.Web.HttpResponse,
request As System.Web.HttpRequest)

      Dim Cookieing As HttpCookie
...


Если не ошибаюсь, в VB.NET для передачи по ссылке не требуется дополнительных указаний в объявлении процедуры..
Ну, а при обработчике просто вызывайте эту процедуру с параметрами.
Должно помочь.

Автор: arilou 17.1.2005, 13:16
Цитата(Kurt @ 17.1.2005, 04:10)
Если не ошибаюсь, в VB.NET для передачи по ссылке не требуется дополнительных указаний в объявлении процедуры..

Надо объявлять вот так:

Код

Sub avatar_cookieng(ByRef session As System.Web.SessionState.HttpSessionState, ByRef response As System.Web.HttpResponse,
ByRef request As System.Web.HttpRequest)


Но можно поступить по другому. Текущий HttpContext содержит в себе статический (Shared) член Current, к которому можно обратиться из любого места программы, естественно, при условии, что в проекте есть ссылка на System.Web. Данный класс дает доступ к Request, Response, Session через одноименные свойства.

Автор: JaguarSmith 17.1.2005, 15:55
Неа так не работает... smile
Или я опять чтото не так делаю...
Сделал новый проект... там обьявил:

Код

Module MyCls


   Public Sub say(ByRef session As System.Web.SessionState.HttpSessionState, ByRef response As System.Web.HttpResponse, ByRef request As System.Web.HttpRequest)


       session("hello") = "hello my friend"
       response.Write("hi")

   End Sub

End Module



Из главной формы вызываю SAY()
Не прокатывает - требует параметров в результате приходится вот так:
Код

       Dim s As System.Web.SessionState.HttpSessionState
       Dim rs As System.Web.HttpResponse
       Dim rq As System.Web.HttpRequest

       say(s, rs, rq)


И опять та же фигня... smile

Автор: arilou 17.1.2005, 16:01
В чем проблема?

Код

Public Sub Say()
  HttpContext.Current.Session("la") = "la"
  Dim var as String = HttpContext.Current.Request("var")
  HttpContext.Response.Redirect("SuperPage.aspx")
End Sub

Добавлено @ 16:05
Сейчас перечитал твой код:

Цитата(JaguarSmith @ 17.1.2005, 15:55)
Не прокатывает - требует параметров в результате приходится вот так:

Код

Код

      Dim s As System.Web.SessionState.HttpSessionState
      Dim rs As System.Web.HttpResponse
      Dim rq As System.Web.HttpRequest

      say(s, rs, rq)

Ты же переменные не инициализируешь, просто Nothing'и передаешь. Надо хотя бы так:

Код

say(HttpContext.Current.Session, HttpContext.Current.Response. HttpContext.Current.Request)

Автор: JaguarSmith 17.1.2005, 18:36
smile УРРЯЯЯЯ!!! ЗАРАБОТАЛО!!!!

Спасибо большое!!! smile

Автор: arilou 17.1.2005, 18:45
Цитата(JaguarSmith @ 17.1.2005, 18:36)
УРРЯЯЯЯ!!! ЗАРАБОТАЛО!!!!
Спасибо большое!!! 


Нн за что smile Так в чем именно было проблема?

Автор: JaguarSmith 17.1.2005, 20:30
smile Дык я в ту функцию которую выложил вначале просто вставил код:

Код

       
       Dim Session As System.Web.SessionState.HttpSessionState = HttpContext.Current.Session
       Dim Response As System.Web.HttpResponse = HttpContext.Current.Response
       Dim Request As System.Web.HttpRequest = HttpContext.Current.Request



И всё заработало...

Я просто фишку про HttpContext.Current. не знал я жы всё сам учу методом научного тыка и копанием в MSDN Library но тут просто полный затык вышел...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)