在新页面刷新后仅控制对DataReader的绑定

时间:2012-09-10 13:21:34

标签: c# asp.net sql-server

Windows: 7 Home Premium
Visual Studio: 2012
语言: C#
SQL: Server 2008

我将一些标签和一个Image绑定到DataReader,它从本地DataBase读取。 标题标签和图像的图像URL正确绑定,但只有在刷新页面后才会填充其余标签。

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

刷新整页后,数据显示正确:
Incorrect Information

代码如下

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);
}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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