我的网站有一个简单的/ adminarea /。在此管理区域内,有三个页面:Default.aspx(新帖子),Edit.aspx和View.aspx。
默认允许我插入新记录。 View允许我使用Reader在页面上显示数据库文本,但Edit不会(出于某种未知原因)想要更新。
ASPX
<form id="form1" runat="server">
<DIV style="max-width: 1500px; margin: 0px auto;">
<table>
<tr>
<td>Enter selection text: </td>
<td>
<asp:TextBox ID="TextBox1" TextMode="MultiLine" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<asp:Button ID="Button1" runat="server" Text="Submit" OnServerClick="Button1_Click1" />
<asp:HiddenField ID="postID" runat="server" />
</td>
</tr>
</table>
</DIV>
</form>
最初,我确实想知道是否在HTML中生成了postID,但是如果你查看源它确实显示了postID。
我的C#
public partial class _Default : System.Web.UI.Page
{
SqlConnection con = new SqlConnection(@"Data Source=db652255182.db.1and1.com; Initial Catalog=db652255182; User ID=dbo652255182; Password=290Plots$");
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
con.Open();
SqlCommand cmd = new SqlCommand("SELECT TOP 1 * From homepageSelection ORDER BY postID DESC");
cmd.CommandType = System.Data.CommandType.Text;
cmd.Connection = con;
string messageInfo = "";
int postIDVal = 0;
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
messageInfo += reader["selectionText"].ToString();
postIDVal = (int)reader["postID"];
}
con.Close();
TextBox1.Text = messageInfo;
postID.Value = postIDVal.ToString();
}
}
protected void Button1_Click1(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("update homepageSelection set selectionText=@selectionText where postID=@postID", con);
cmd.Parameters.AddWithValue("@selectionText", TextBox1.Text);
cmd.Parameters.AddWithValue("@postID", postID.Value);
con.Open();
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
con.Close();
}
}
我的表中只有一列:homepageSelection:selectionText
我 NOT 得到任何错误。
我也知道SQL注入(即使.Net有很多内置的保护)。出于学习目的,我确实相信这是可以的。
我(对这个问题不重要)使用脚本在发送之前删除危险内容。
答案 0 :(得分:1)
当您单击按钮时会触发Page_Load事件,并且它会在Button1_Click1事件之前触发。您应该向Page_Load事件添加IsPostBack -statement,并且只在未回发页面时从数据库加载数据。
这应该有效:
void OpenSecondWindowExecute()
{
System.Windows.Application.Current.MainWindow.Hide();
SecondWindow sw = new SecondWindow();
sw.WindowStartupLocation = WindowStartupLocation.CenterScreen;
sw.Show();
}
bool CanOpenSecondWindowExecute()
{
return true;
}
public ICommand OpenSecondWindow { get { return new RelayCommand(OpenSecondWindowExecute, CanOpenSecondWindowExecute); } }