Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Я решил пойти с новой Маршрутизацией ASP.net.
Почему не urlRewriting? Поскольку я не хочу изменять чистый URL, который маршрутизация дает Вам.
Вот код:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
RegisterRoutes(RouteTable.Routes)
End Sub
Public Sub RegisterRoutes(ByVal routes As RouteCollection)
Dim reportRoute As Route
Dim DefaultLang As String = "es"
reportRoute = New Route("{lang}/{page}", New LangRouteHandler)
'* if you want, you can contrain the values
'reportRoute.Constraints = New RouteValueDictionary(New With {.lang = "[a-z]{2}"})
reportRoute.Defaults = New RouteValueDictionary(New With {.lang = DefaultLang, .page = "home"})
routes.Add(reportRoute)
End Sub
Затем класс LangRouteHandler.vb:
Public Class LangRouteHandler
Implements IRouteHandler
Public Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) As System.Web.IHttpHandler _
Implements System.Web.Routing.IRouteHandler.GetHttpHandler
'Fill the context with the route data, just in case some page needs it
For Each value In requestContext.RouteData.Values
HttpContext.Current.Items(value.Key) = value.Value
Next
Dim VirtualPath As String
VirtualPath = "~/" + requestContext.RouteData.Values("page") + ".aspx"
Dim redirectPage As IHttpHandler
redirectPage = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, GetType(Page))
Return redirectPage
End Function
End Class
Наконец я использую default.aspx в корне для перенаправления к значению по умолчанию Ленга, используемого в списке браузера.
Возможно, это может быть сделано с маршрутом. Значения по умолчанию, но не работают в Visual Studio (возможно, она работает в сервере),
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim DefaultLang As String = "es"
Dim SupportedLangs As String() = {"en", "es"}
Dim BrowserLang As String = Mid(Request.UserLanguages(0).ToString(), 1, 2).ToLower
If SupportedLangs.Contains(BrowserLang) Then DefaultLang = BrowserLang
Response.Redirect(DefaultLang + "/")
End Sub
Некоторые источники:
* блог Mike Ormond
* блог Chris Cavanagh
* MSDN
Я personnaly использую файлы ресурсов.
Очень эффективный, очень простой.
UrlRewriting является способом пойти.
Существует хорошая статья о MSDN на лучших способах сделать это.
Своего рода касательная, но я на самом деле постарался бы не делать это с различными путями, если различные языки не абсолютно довольны отдельный друг от друга.
Для разряда Google, или для пользователей, совместно использующих URL (одно из больших преимуществ 'чистых' URL), Вы хотите, чтобы адрес остался максимально постоянным.
Можно найти предпочтения языка пользователей от их настроек браузера:
CultureInfo.CurrentUICulture
Затем Ваш URL для английского или испанского языка:
www.domain.com/products/newproduct
Тот же адрес для любого языка, но пользователь получает страницу на их выбранном языке.
Мы используем это в Канаде для обеспечения систем на английском и французском языке одновременно.
Кроме того, предостерегитесь новый IIS 7.0 - Перезапись URL. Превосходная статья здесь http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/
Мне понравилась эта часть, Какую Опцию необходимо Использовать?
При разработке нового веб-приложения ASP.NET, которое использует или ASP.NET MVC или ASP.NET Динамические Технологии передачи данных, используйте маршрутизацию ASP.NET. Ваше приложение извлечет выгоду из собственной поддержки чистых URL, включая поколение чистых URL для ссылок в Ваших Веб-страницах. Обратите внимание, что маршрутизация ASP.NET еще не поддерживает стандартные приложения Веб-форм, хотя существуют планы поддерживать ее в будущем.
Если Вы уже имеете веб-приложение ASP.NET прежней версии и не хотите изменять его, используйте URL - переписывают модуль. URL - переписывает модуль, позволяет Вам переводить благоприятные для поисковой системы URL в формат, который в настоящее время использует Ваше приложение. Кроме того, это позволяет Вам создавать правила перенаправления, которые могут использоваться для перенаправления поисковых роботов поисковой системы для очистки URL. http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/
Спасибо, Maulik.
Чтобы сделать это с Маршрутизацией URL, обратитесь к этому сообщению: