2010-07-26 3 views
3

Я пытаюсь сделать 2 переменных доступными на моем сайте. Я просматриваю URL-адрес, чтобы восстановить оба из них.Написание моего первого VB.NET класса

Этот код на самой странице отлично работает.

Dim countryLanguage As String 
countryLanguage = (Request.ServerVariables("URL")) 
Dim langVar = (Mid(countryLanguage, 2, 2)) 
Dim countryVar = (Mid(countryLanguage, 5, 2)) 

Я создал файл класса, код которого ниже. При этом я получаю ошибку при компиляции (BC30451: Name 'Request' не объявлен.).

Public Class url_parser 

    Public Shared Function urlVars(ByVal langVar, ByVal countryVar) As String 
     Dim countryLanguage As String 
     countryLanguage = (Request.ServerVariables("URL")) 
     Dim langVar = (Mid(countryLanguage, 2, 2)) 
     Dim countryVar = (Mid(countryLanguage, 5, 2)) 
    End Function 

End Class 

Благодаря

+1

ли вы проверить импорт? – Kyra

ответ

1

Вы можете использовать System.Web.HttpContext.Current.Request, чтобы получить объект запроса для текущего потока.

Лучший способ получить информацию о вашей стране и языковых папках - использовать Request.Url.Segments.

Public Class url_parser 
    Public Shared Function urlLanguage() As String 
     Dim Request = Web.HttpContext.Current.Request 
     Return Request.Url.Segments(1).TrimEnd("/"c) 
    End Function 

    Public Shared Function urlCountry() As String 
     Dim Request = Web.HttpContext.Current.Request 
     Return Request.Url.Segments(2).TrimEnd("/"c) 
    End Function 
End Class 

Доступ к этим статическим функциям таким образом.

Dim MyLanguage = url_parser.urlLanguage 
Dim MyCountry = url_parser.urlCountry 

В этом примере, если Url является "/ ен/нам /", то ...

  • Сегмент (0) является "/"
  • Сегмент (1) является «ан /»
  • сегмента (2) является "нас /"
+0

Вопрос Я могу получить результат с кодом, содержащимся в моей странице. Но когда я помещаюсь в функцию, я продолжаю получать переменную, не связанную с ошибкой на моей странице. Мне нужно как-то вызвать этот метод с моей страницы? (мои извинения, если это вопрос идиот) Thanks – BillZ

+0

Редактировать: оригинальная функция потребовала некоторой работы; Я починил это. Возвращаемые строки должны быть «ByRef» и не затухать. Нет результата возврата, поэтому я изменил его на «Sub». –

+0

Я пытаюсь вызвать этот метод на мою страницу с кодом ниже, но он не работает. Есть предположения? Dim globalVars Как url_parser = new url_parser (countryLanguage) – BillZ

4
System.Web.HttpContext.Current.Request 

Ваша страница будет уже импортировать System.Web и уже ссылается HttpContext.Current для вас внутри. В внешнем классе вы должны убедиться, что вы импортируете пространство имен вручную и ссылаетесь на текущий контекст.

С другой стороны, связывание нестраничных классов с объектами жизненного цикла страницы (например, HttpContext) считается плохим дизайном. Но для начала все хорошо, только чтобы заставить его работать. Тем не менее, я рекомендую ознакомиться с шаблоном MVC и разделением проблем (и инъекцией зависимостей). Если вы начинающий программист, это может быть немного продвинутым, но если вы хотите долгое время программировать, считайте его достойной целью настроить свои взгляды на :)

0

Объект Request обычно недоступен в простой автономный класс.

Я бы порекомендовал вам передать строковое значение countryLanguage в качестве дополнительной переменной из вызова внутри вашего класса страницы.

Если вы действительно должны получить доступ к объекту Reqeust из класса (не recoemmended) использовать:

HttpContext.Current.Request 
Смежные вопросы