如何在ASP.NET(3.5)中创建“公共”用户配置文件页面

时间:2010-12-15 05:28:08

标签: c# asp.net windows user-controls

我实现了ASP.NET用户控件。

每个用户都可以登录并更新他们的个人数据,例如在私人页面myData.html

现在,我希望他们的个人资料的一部分能够显示在公开的只读页面上,例如 - userGreg45public.html

如何实施或修改用户控件,以允许每个用户拥有自己的唯一公共页面?

(注意 - 每个用户都有一组“文件”命名完全相同,因为只有在特定人员登录时才能访问这些文件。例如,myData.html具有相同的名称但显示不同的数据基于谁登录。“公共页面”必须为每个成员提供唯一的文件名

谢谢。

3 个答案:

答案 0 :(得分:4)

听起来问题是你希望每个用户都拥有自己的网址......是这样的吗?

您可以使用网址重写。一种更简单的方法是在Application_BeginRequest文件的Global.asax方法中使用HttpContext.RewritePath

编辑:添加了示例代码

我在这里做了一些假设...我所做的假设是:a)用户有名字,b)用户有姓氏,c)用户有一些唯一标识符,在我的情况下,我使用的是“用户id”。

首先,您必须决定公共网址的格式。这样的事情可以奏效:

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

其中1234是userId。

接下来,您将需要一个函数来构建这些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事件。

接下来是Regex进行繁重的工作。它基本上匹配任何对用户配置文件页面的请求,并在内部告诉ASP.Net将请求路由到另一个页面。新请求看起来像这样:

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

由您来实施/public/userProfile.aspx页面。有许多方法可以让事情变得简单。它可能像使用TextBox控件替换Label控件一样直接吗?

如果您想要公开多个页面,则可以实现多个重写规则。 (虽然在某些时候你最好使用像thisthis这样的组件。

作为一个FYI,我在this page上引用了重写内容的样本。如果您有任何问题,请告诉我。

答案 1 :(得分:2)

默认情况下,您可以为访问过该网站的用户分配“访客”等角色。

答案 2 :(得分:1)

我刚刚在网站上实现了类似的功能。我创建了两个页面。一个是私有的并且要求用户登录。该页面允许用户编辑他们的个人资料。

另一页是公共页面。它不允许编辑,它位于任何人都可以查看的位置。

相关问题