0

Windows:7 家庭高级版
Visual Studio:2012
语言:C#
SQL:Server 2008

我将一些标签和图像绑定到从本地数据库读取的 DataReader。标题标签和图像的图像 URL 正确绑定,但其余标签仅在我刷新页面后才会填充。

第一张图片显示了我单击用户个人资料链接后的页面。请注意,页面中的 3 个标签包含不正确的信息:
错误信息

整页刷新后,数据正​​常显示:
信息不正确

代码如下

private static string _acceptingChallenges = "0";
private static string _curUser;
private static string _website = "[None]";
private static string _dateJoined = DateTime.Now.ToString();

protected void Page_Load(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(Request.QueryString["user"]))
    {
        _curUser = (Request.QueryString["user"]);
        pnlProfilePublic.Visible = true;
        pnlProfilePrivate.Visible = false;
        PopulatePublic();
    }
    else
    {
        if (!string.IsNullOrEmpty((string) Session["Nickname"]))
        {
            _curUser = Session["Nickname"].ToString();
            pnlProfilePublic.Visible = false;
            pnlProfilePrivate.Visible = true;
            PopulatePrivate();
        }
        else
        {
            Response.Redirect("~/Default.aspx");
        }
    }

    InitiateData();
}

private void InitiateData()
{
    if (Master == null) return;

    Label lblTitle = (Label)Master.FindControl("lblTitle");

    const string strSql = "SELECT * FROM vwGetProfileDetails WHERE memberNickname=@member";

    var sqlComm = new SqlCommand(strSql, DataConn.Connect()) { CommandType = CommandType.Text };

    sqlComm.Parameters.Add(new SqlParameter("@member", SqlDbType.VarChar, 20)).Value = _curUser;

    var rdr = sqlComm.ExecuteReader();
    int count = 0;
    while (rdr.Read())
    {
        imgProfile.ImageUrl = rdr["memberAvatarLocation"].ToString();
        lblTitle.Text = _curUser + "'s Profile Page";

        _acceptingChallenges = rdr["memberAcceptingChallenge"].ToString();
        _website = rdr["memberWebsite"].ToString();
        _dateJoined = rdr["dateAdded"].ToString();

        count = count + 1;
    }

    rdr.Close();
    DataConn.Disconnect();
    Response.Write(count);
}
4

2 回答 2

1

第一次调用 _curUser 是否有值InitiateData?我不这么认为

此外,您不想在网页上使用静态变量。

于 2012-09-10T13:26:32.937 回答
1

PopulatePublic 和 PopulatePrivate 在 InitiateData 之前被调用...因此它们将存储在静态字符串中,仅在下次调用页面时才会填充。

如果您使用的是 ASP.Net 控件,则可能会启用自动查看状态,以便在回发时重新填充控件。所以你可以做 lblWebsite.Text = rdr["memberWebsite"].ToString(); 并让 ASP.NET 管理视图状态..不需要静态字符串..

于 2012-09-10T13:32:35.257 回答