我遇到了一个小问题。到目前为止,我的应用程序使用sql server datbase验证用户登录凭据,并将它们重定向到welcome.aspx页面。我还创建了一个' PlayerDetails.aspx'我希望用于在txt框中显示其个人详细信息(在注册过程中获得)的页面。
我觉得我在这里有一个非常明显的空白时刻但是如何在登录阶段创建一个player.cs对象,并在PlayerDetails.aspx页面上使用该对象来填充字段?< / p>
我的代码片段如下,但如果您需要进一步说明,请告知我们。
感谢 杰森
protected void btnLogin_Click(object sender, EventArgs e)
{
userlogin = new userlogin(txtUserName.Text, txtPassword.Text);
var exists = login.ValidateLogin();
if (exists == 1)
{
//shall I create a new 'Player.cs' object here??
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);
}
else
{
lblMessage.Text = "Invalid username and/or password";
}
}
我的数据库包含每个唯一GUID的值
public class Player : Credentials
{
public Guid AccountID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
<asp:Content ID="Content1" runat="server" contentplaceholderid="ContentPlaceHolder1">
<table>
<tr>
<td>First Name</td>
<td><asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>Last Name</td>
<td><asp:TextBox ID="txtLastName" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>Last Name</td>
<td><asp:TextBox ID="txtEmail" runat="server"></asp:TextBox></td>
</tr>
</table>
protected void Page_Load(object sender, EventArgs e)
{
//id like to set the values of the txt boxes to those in my Player object, not yet created
}
答案 0 :(得分:1)
有几种方法,有不同的权衡。可能最常见的两个是:
在需要时从后备存储中获取对象。基本上在Page_Load
上,您可以使用您拥有的标识符获取所需的数据:
protected void Page_Load(object sender, EventArgs e)
{
var player = SomePlayerRepository.GetPlayer(User.Identity.Name);
txtFirstName.Text = player.FirstName;
// etc.
}
SomePlayerRepository
可以通过多种方式实施。例如,它可以包括内存中缓存,因此不必反复访问数据库。
或者:
最初获取对象并将其存储在应用程序本地的某个位置。这非常类似于&#34;缓存&#34;如上所述,它更明确,更少抽象。例如,您可以将其存储在Session
:
var exists = login.ValidateLogin();
if (exists == 1)
{
Session["CurrentPlayer"] = SomePlayerRepository.GetPlayer(txtUserName.Text);
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, false);
}
然后在Page_Load
:
protected void Page_Load(object sender, EventArgs e)
{
var player = (Player)Session["CurrentPlayer"];
txtFirstName.Text = player.FirstName;
// etc.
}
其他选项可能包括将其存储在用户的cookie中。
我个人更喜欢第一种方法,因为它分离了抓取/缓存/等。来自页面逻辑的逻辑,为要使用的页面提供通用的应用程序范围(或可能是域范围)的接口。这解耦了逻辑的不同组件,允许您以最小的努力修改/替换组件。