0

次のフィールドを使用して、ユーザーの詳細を表示する簡単なフォームを作成しました。

First Name
Surname
Team Name
Team Stadium
Email
Receive Reminder
Receive Summary

ログインしたユーザーの詳細を取得し、フィールドを編集して更新できるようにします。ただし、更新ボタンのクリックイベントが発生すると、フィールドは元の値に戻ります。

これがC#の私のコードです

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("[dbo].[GetUsersProfile]", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    string userId = Membership.GetUser().ProviderUserKey.ToString();
    SqlParameter userIDParam = new SqlParameter("@userId", userId);

    cmd.Parameters.Add(userIDParam);

    conn.Open();
    SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    while (dReader.Read())
    {
        FirstName.Text = (dReader["ManagerFirstName"].ToString());
        Surname.Text = (dReader["ManagerSurname"].ToString());
        TeamName.Text = (dReader["TeamName"].ToString());
        StadiumName.Text = (dReader["TeamStadium"].ToString());
        Email.Text = (dReader["Email"].ToString());
        Reminder.Checked = (bool)dReader["RecieveReminder"];
        Prediction.Checked = (bool)dReader["RecieveSummary"];
    }
    dReader.Close();
    conn.Close();
}

protected void UpdateDetailsButton_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("[dbo].[UpdateUserDetails]", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    string userId = Membership.GetUser().ProviderUserKey.ToString();
    SqlParameter userIDParam = new SqlParameter("@userId", userId);

    TextBox FirstNameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("FirstName");
    SqlParameter FirstNameParam = new SqlParameter("@ManagerFirstName", FirstNameTextBox.Text);

    TextBox SurnameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("Surname");
    SqlParameter SurnameParam = new SqlParameter("@ManagerSurname", SurnameTextBox.Text);

    TextBox TeamNameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("TeamName");
    SqlParameter TeamNameParam = new SqlParameter("@TeamName", TeamNameTextBox.Text);

    TextBox TeamStadiumNameTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("StadiumName");
    SqlParameter TeamStadiumNameParam = new SqlParameter("@TeamStadium", TeamStadiumNameTextBox.Text);

    TextBox EmailTextBox = (TextBox)Master.FindControl("ContentPlaceHolderMain").FindControl("Email");
    SqlParameter EmailParam = new SqlParameter("@Email", EmailTextBox.Text);

    SqlParameter RecieveReminderParam = new SqlParameter("@RecieveReminder", 1);

    SqlParameter RecieveSummaryParam = new SqlParameter("@RecieveSummary", 1);
    cmd.Parameters.Add(userIDParam);
    cmd.Parameters.Add(FirstNameParam);
    cmd.Parameters.Add(SurnameParam);
    cmd.Parameters.Add(TeamNameParam);
    cmd.Parameters.Add(TeamStadiumNameParam);
    cmd.Parameters.Add(EmailParam);
    cmd.Parameters.Add(RecieveReminderParam);
    cmd.Parameters.Add(RecieveSummaryParam);

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
}

そしてASPのために

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderMain" runat="server">
<div class="row">
    <div class="span12">
        <h3>
            My Profile</h3>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="firstNameTextBox">
            First Name:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="FirstName" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="surnameTextBox" >
            Surname:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="Surname" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="teamNameTextBox">
            Team Name:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="TeamName" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="stadiumNameTextBox">
            Stadium Name:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="StadiumName" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="emailTextBox">
            Email Address:</label>
    </div>
    <div class="span3">
        <asp:TextBox ID="Email" runat="server"></asp:TextBox>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="reminderCheckBox">
            Recieve Reminder Email:</label>
    </div>
    <div class="span3">
        <input type="checkbox" id="Reminder" runat="server"/>
    </div>
</div>
<div class="row">
    <div class="span2">
        <label class="control-label" for="predictionCheckBox">
            Recieve Prediction Email:</label>
    </div>
    <div class="span3">
        <input type="checkbox" id="Prediction" runat="server"/>
    </div>
</div>
<div class="row">
    <div class="span5">
        <asp:Button ID="UpdateDetailsButton" 
            CssClass="btn btn-primary rightAlignButton" runat="server" Text="Confirm" 
            onclick="UpdateDetailsButton_Click" />
    </div>
</div>

SQL Management Studioでストアドプロシージャを使用しようとしましたが、期待どおりに更新されるため、何らかの理由で、[更新]をクリックしたときにフィールドが更新された値を読み取っていません。

どんな提案も素晴らしいでしょう、ありがとう!

4

2 に答える 2

1

Page_LoadイベントでIsPostBackを使用する

if(!IsPostBack)
{
        SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
        SqlCommand cmd = new SqlCommand("[dbo].[GetUsersProfile]", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        string userId = Membership.GetUser().ProviderUserKey.ToString();
        SqlParameter userIDParam = new SqlParameter("@userId", userId);

        cmd.Parameters.Add(userIDParam);

        conn.Open();
        SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        while (dReader.Read())
        {
            FirstName.Text = (dReader["ManagerFirstName"].ToString());
            Surname.Text = (dReader["ManagerSurname"].ToString());
            TeamName.Text = (dReader["TeamName"].ToString());
            StadiumName.Text = (dReader["TeamStadium"].ToString());
            Email.Text = (dReader["Email"].ToString());
            Reminder.Checked = (bool)dReader["RecieveReminder"];
            Prediction.Checked = (bool)dReader["RecieveSummary"];
        }
        dReader.Close();
        conn.Close();
}
于 2013-03-15T17:28:32.327 に答える
0

データベースからデータを最初にロードする必要があるのは、それがポストバックではないかどうかを確認する必要があるためです。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        LoadDataFromDatabase();
    }
}

private void LoadDataFromDatabase()
{
    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["RaiseFantasyLeagueConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand("[dbo].[GetUsersProfile]", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    string userId = Membership.GetUser().ProviderUserKey.ToString();
    SqlParameter userIDParam = new SqlParameter("@userId", userId);

    cmd.Parameters.Add(userIDParam);

    conn.Open();
    SqlDataReader dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    while (dReader.Read())
    {
        FirstName.Text = (dReader["ManagerFirstName"].ToString());
        Surname.Text = (dReader["ManagerSurname"].ToString());
        TeamName.Text = (dReader["TeamName"].ToString());
        StadiumName.Text = (dReader["TeamStadium"].ToString());
        Email.Text = (dReader["Email"].ToString());
        Reminder.Checked = (bool)dReader["RecieveReminder"];
        Prediction.Checked = (bool)dReader["RecieveSummary"];
    }
    dReader.Close();
    conn.Close();
}
于 2013-03-15T17:28:31.740 に答える