我有很多用户。一旦用户登录,他将在他的个人资料中看到包含文档列表的gridview。假设有两个用户abc和xyz。 abc有文件列表,如小,虎,负载和xyz有documnets列表花,虎。我想以这样的方式创建网页,当abc登录时,他的主页的gridview应该包含little,tiger,load,当xyz登录时,他的主页的gridview应该包含flower,tiger。我怎么能这样做?
答案 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。所以现在无论谁登录,创建文档,都只能看到那些文档。