网页显示取决于不同的用户

时间:2011-11-21 12:14:03

标签: c#

我有很多用户。一旦用户登录,他将在他的个人资料中看到包含文档列表的gridview。假设有两个用户abc和xyz。 abc有文件列表,如小,虎,负载和xyz有documnets列表花,虎。我想以这样的方式创建网页,当abc登录时,他的主页的gridview应该包含little,tiger,load,当xyz登录时,他的主页的gridview应该包含flower,tiger。我怎么能这样做?

6 个答案:

答案 0 :(得分:0)

你应该使用Session对象。

当用户abc进入时 - 你给他讲话“a”

当用户xyz进入时 - 你给他开会话“b”

这是你应该如何处理的。

答案 1 :(得分:0)

我不知道您使用的是哪个数据存储,但我们的想法是每个文档都有一个名为UserID的属性,当用户登录时,您会在页面中填入所有包含{的文档。 {1}}。

评论后编辑:

我假设您的用户数据存储在标准的.NET用户数据库中。如果无法连接数据库中的用户和文档,则应添加一列用于存储可以访问文档而不是用户的角色。然后每个文档都有一个角色,允许其成员查看该文档。

但更好的方法是在数据库级别将文档和用户与N:M关系表连接起来。然后每个文档都有一个可以看到它的用户列表。

您没有使用Table1连接控件,您可以根据Table1的文档检查已记录用户的用户名(或其他属性)。用户成功登录后,您可以从UserID == LoggedUserID属性Page获取用户名。或者,如果您将角色与文档一起使用,则可以使用User.Identity.Name

检查用户是否在文档的角色中

问题非常广泛,很难给出具体答案。

答案 2 :(得分:0)

您需要一个将文档链接到用户的数据。我建议对用户进行分组,然后在每个文档中应用一个标记,说明文档是否可以出现在一个组中。这样做的好处是,一个用户可以属于许多组。

当用户登录时,会话可以包含对他们所属的组的引用。

答案 3 :(得分:0)

您可以使用设计页面上的列表框创建一个包含相关文件名的列表,而不是simplay将列表框与列表绑定。

一个例子可以是:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">

            <StackPanel Margin="0,-21,0,0">
                <ListBox  Height="650" HorizontalAlignment="Left" Margin="0,0,0,0" Name="listBoxNews" FontSize="14" VerticalAlignment="Top" Width="472" ItemsSource="{Binding NewsDetailsCollection}" Foreground="#FF0A0909" FontWeight="Normal"  >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical" Width="400" Canvas.Left="50" Height="270" Canvas.Top="6">
                                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                                    <TextBlock Height="38" Name="lblTitle" Width="260" FontSize="28" Foreground="White" FontWeight="Bold" TextWrapping="Wrap" Text="{Binding title}" HorizontalAlignment="Left" />
                                    <Button Content="Click" Click="Button_Click" ></Button>
                                </StackPanel>

                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </Grid>

<强> C#

public partial class News : PhoneApplicationPage
    {
        public News()
        {

            UriBuilder fullUri = new UriBuilder("http://news.google.co.in/news");
            fullUri.Query = "hl=en&gl=in&q=mumbai+marathon&um=1&ie=UTF-8&output=rss";
            HttpWebRequest forecastRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri);

            ForecastUpdateState forecastState = new ForecastUpdateState();
            forecastState.AsyncRequest = forecastRequest;

            forecastRequest.BeginGetResponse(new AsyncCallback(HandleForecastResponse), forecastState);

            //  wbt.URL = "http://www.google.com";
            //wbt.Show();

            InitializeComponent();
        }
        private void HandleForecastResponse(IAsyncResult asyncResult)
        {
            ForecastUpdateState forecastState = (ForecastUpdateState)asyncResult.AsyncState;
            HttpWebRequest forecastRequest = (HttpWebRequest)forecastState.AsyncRequest;

            forecastState.AsyncResponse = (HttpWebResponse)forecastRequest.EndGetResponse(asyncResult);

            Stream streamResult;
            // get the stream containing the response from the async call
            streamResult = forecastState.AsyncResponse.GetResponseStream();
            // load the XML
            XElement xmlNews = XElement.Load(streamResult);
            XElement xmlCurrent = xmlNews.Descendants("channel").First();
            XElement x1 = xmlCurrent.Descendants("item").First();
            string title = (string)x1.Element("title");


            IEnumerable<XElement> xmlIEnumerableNews = xmlCurrent.Descendants("item");

            IEnumerable<NewsDetails> objIEnumerableNews = from element in xmlIEnumerableNews
                                                          select new NewsDetails
                                                          {
                                                              title = (string)(element.Element("title")),
                                                              link = (string)(element.Element("guid")),
                                                              date = (string)(element.Element("pubDate"))
                                                          };


            List<NewsDetails> objListNews = new List<NewsDetails>();
            int count = objListNews.Count;
            foreach (NewsDetails news in objIEnumerableNews)
            {
                news.title = news.title + " " + news.date;
                int pos = news.link.IndexOf('=');
                news.link = news.link.Substring(pos + 1, news.link.Length - pos - 1);
                objListNews.Add(news);
            }

            int t = objListNews.Count();
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                listBoxNews.ItemsSource = objListNews;
            });
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            NewsDetails news = (sender as Button).DataContext as NewsDetails;
            WebBrowserTask wbt = new WebBrowserTask();
            wbt.URL = news.link;
            wbt.Show();

        }

        private void FAQs_Click(object sender, EventArgs e)
        {
            NavigationService.Navigate(new Uri("/Info/FAQs/Questions.xaml", UriKind.Relative));

        }

        private void Weather_Click(object sender, EventArgs e)
        {
            NavigationService.Navigate(new Uri("/Info/Weather.xaml", UriKind.Relative));

        }

        private void About_Click(object sender, EventArgs e)
        {
            NavigationService.Navigate(new Uri("/Info/About.xaml", UriKind.Relative));

        }

    }
    public class NewsDetails
    {
        public string title { get; set; }
        public string link { get; set; }
        public string date { get; set; }
        //public String title, link, description;
    }

请具体说明您的工作语言

答案 4 :(得分:0)

这是一个很大的问题,在堆栈溢出的qustion范围内真的无法回答。如果这是为了“我需要一个现在这样做的网站”,你问这个问题,你最好的办法是看一些现有的CMS,看看他们能为你做些什么。“

如果他们满足您的需求很酷,否则Hasan说您可能需要购买一本书并开始学习构建网站。再次从现有的CMS开始可能是一个很好的方法。

虽然我不愿意提及它,因为担心你只是潜入一个你还没准备好的问题...... OrchardCMS会让你构建这种页面而不需要编写太多的代码(尽管不是零)并且您仍然需要了解C#,razor和ASP.NET的方法,而不必过多地挖掘数据库中的内容,并且是开源的,它为您提供了一个很好的代码存储库,可以执行类似于您的操作想做。

答案 5 :(得分:0)

Thnx都是为了你的支持。我终于找到了解决方案。在我的数据库表中,我添加了一个名为username的列。当我创建任何文件时我明确表示我已将用户名也包含在数据库表中。在显示从数据库表中获取数据的gridview时,我根据用户名过滤数据,例如选择文件名,日期来自abc,其中username = @username。我在gridview上方添加了一个loginName,并将其值存储在一个不可见的标签中。我在数据库表的where子句中使用了这个标签作为控件ID。所以现在无论谁登录,创建文档,都只能看到那些文档。