核心流程
- 登錄驗證:
SELECT * FROM Users WHERE username=@u AND pwd=@p,通過則 Session["uid"] = userId。
- 頁面加載:
uid = (int)Session["uid"],SELECT * FROM Users WHERE id=@uid 綁定 GridView。
- GridView 編輯:啟用
AutoGenerateEditButton,RowEditing/RowUpdating/RowCancelingEdit 事件中執行 UPDATE,重新綁定。
- 權限攔截:
RowUpdating 前再次比對 Session["uid"] 與數據行 id,防止越權修改。
關鍵代碼
// 登錄
Session["uid"] = reader["id"];
// 頁面加載
if (!IsPostBack) BindGrid();
void BindGrid() {
int uid = (int)Session["uid"];
using (var da = new SqlDataAdapter("SELECT * FROM Users WHERE id=@uid", conn)) {
da.SelectCommand.Parameters.AddWithValue("@uid", uid);
var dt = new DataTable();
da.Fill(dt);
gv.DataSource = dt; gv.DataBind();
}
}
// 更新
protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e) {
int uid = (int)Session["uid"];
string email = (string)e.NewValues["email"];
using (var cmd = new SqlCommand("UPDATE Users SET email=@e WHERE id=@uid", conn)) {
cmd.Parameters.AddWithValue("@e", email);
cmd.Parameters.AddWithValue("@uid", uid);
conn.Open(); cmd.ExecuteNonQuery();
}
gv.EditIndex = -1; BindGrid();
}
安全提示
- 密碼存**哈希 (BCrypt/Argon2)**,不可明文。
- 所有 SQL 參數化,防注入。
- 敏感操作加
ValidateAntiForgeryToken。