0

Windows:7 Home Premium
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に呼び出されたときに値を持っていますか? 私はそうは思わない

また、Web ページで静的変数を使用したくありません。

于 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 に答える