2010-12-15 1 views
0

Я внедрил пользовательские элементы управления ASP.NET.Как создать «общедоступную» страницу профиля пользователя в ASP.NET (3.5)

Каждый пользователь может войти и обновить свои личные данные, например, на частной странице myData.html

Теперь я хотел бы часть своего профиля, которое будет отображаться на общедоступной странице только для чтения, например - userGreg45public.html

Как реализовать или изменить пользовательский элемент управления, чтобы каждый пользователь имел свою собственную уникальную общедоступную страницу?

(примечание - есть «набор» файлов, которые все равно одинаковы для каждого пользователя, потому что они могут быть доступны только при входе конкретного пользователя. Например, myData.html имеет то же имя, но отображает разные данные, основанные на том, кто входит в систему. «Общая страница» должна иметь уникальное имя файла для каждого члена)

Спасибо.

ответ

4

Похоже, проблема заключается в том, что вы хотите, чтобы каждый пользователь имел свой собственный URL ... Это тот случай?

Вы можете использовать переписывание URL. Одним из наиболее простых подходов является использование HttpContext.RewritePath в методе Application_BeginRequest вашего файла Global.asax.

EDIT: Добавлен Пример кода

Я делаю некоторые предположения здесь ... Предположения я делаю это, что а) пользователи имеют имя, б) пользователи имеют фамилию и с) пользователи имеют уникальный идентификатор, в моем случае я использую «userId».

Для начала вам нужно будет выбрать формат для общедоступных URL-адресов. Что-то вроде этого могло бы работать:

http://www.yoursite.com/public/firstname-lastname-1234.aspx 

Где 1234 пользователь.

Затем вам понадобится функция для создания этих URL-адресов. Что-то вроде этого возможно:

String ToPublicUrl(String firstName, String lastName, int userId) 
{ 
    return String.Format("http://www.yoursite.com/public/{0}-{1}-{2}.aspx", 
     Regex.Replace(firstName, "[^a-zA-Z]", ""), 
     Regex.Replace(lastName, "[^a-zA-Z]", ""), 
     userId); 
} 

Обратите внимание, как я удаляю любые буквы, отличные от буквы.

Теперь в файле Global.asax, добавьте следующий код:

static Regex ProfileRegex = new Regex(@"/public/(?<firstname>[a-zA-Z]+)-(?<lastname>[a-zA-Z]+)-(?<userid>[0-9]+)\.aspx$", 
    RegexOptions.IgnoreCase | RegexOptions.Compiled); 

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Match match = ProfileRegex.Match(Context.Request.FilePath); 
    if((match != null) && match.Success) 
    { 
     Context.RewritePath((String.Format("~/public/userProfile.aspx?userId={0}", 
      match.Groups["userid"])); 
    } 
} 

Там есть много вещей происходит здесь. Чтобы начать, просто определив эту функцию, ASP.Net подпишет ее на событие HttpApplication.BeginRequest.

Дальше это регулярное выражение, которое делает тяжелый подъем.Он в основном соответствует любым запросам на странице профиля пользователя и внутренне сообщает ASP.Net о маршрутизации запроса на другую страницу. Новые запросы будут выглядеть следующим образом:

http://www.yoursite.com/public/userProfile.aspx?userId=1234 

Это до вас, чтобы реализовать /public/userProfile.aspx страницу. Есть много способов сделать все правильно. Это может быть так же прямо, как замена TextBox элементов управления с помощью Label элементов управления?

Если у вас есть несколько страниц, которые вы хотите опубликовать, вы можете реализовать несколько правил перезаписи. (Хотя в какой-то момент вам лучше использовать компонент, например this или this).

В качестве FYI я ссылался на образцы на this page для перезаписи. Дайте знать, если у вас появятся вопросы.

+0

спасибо. Это дает мне гораздо лучшее представление о том, что происходит и что мне нужно сделать для создания этого URL-адреса. Похоже, что чтение только не должно быть большой проблемой. В этот уик-энд я ударю его, спасибо еще раз. –

+1

Без проблем ... Удачи! – dana

+1

Dana, когда и как используется ToPublicUrl()? Спасибо. –

2

Вы можете по умолчанию назначить такую ​​роль, как «гость» для пользователя, посетившего сайт.

1

Я только что реализовал что-то подобное на сайте. Я создал две страницы. Тот, который был закрыт и требовал, чтобы пользователь вошел в систему. Эта страница позволила пользователю отредактировать свой профиль.

И другая страница была общедоступной. Он не разрешил редактирования, и он был в месте, доступном для просмотра.

+0

да, и ......... –

Смежные вопросы