我编写此代码以从HTML字段中获取消息信息,然后执行insert命令。但是InsertCommand没有执行。这有什么问题?
<form action="FormParameter.aspx" method="post">
<label >Title :</label>
<input id="txtTitle" type="text" /><br />
<label >Subject:</label>
<input id="txtSubject" type="text" /><br />
<label >Category: </label>
<input id="txtCategory" type="text" /><br />
<input id="btnAdd" type="submit" value="Add" />
</form>
<form id="form1" runat="server">
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MessagesConnectionString %>"
InsertCommand="INSERT INTO [Messages] ([Title], [Subject], [CategoryID]) VALUES (@Title, @Subject, @CategoryID)"
SelectCommand="SELECT * FROM [Messages]" >
<InsertParameters>
<asp:FormParameter Name="Title" FormField="txtTitle" DefaultValue="No Title" />
<asp:FormParameter Name="Subject" FormField="txtSubject" DefaultValue="No Subject" />
<asp:FormParameter Name="CategoryID" FormField="txtCategory" DefaultValue="No Category" />
</InsertParameters>
</asp:SqlDataSource>
</form>
</body>
</html>
并在codeFile(FormParameter.aspx.cs)
中void Page_Load()
{
if (Request.Form["btnAdd"] != null)
SqlDataSource1.Insert();
}
答案 0 :(得分:1)
您已添加一个调用FormParameter.aspx的表单。这不能像手动那样工作。
因此,只保留一个表单并将所有控件放在那里,然后发布回来将正常工作。
<form id="form1" runat="server">
<label >Title :</label>
<input id="txtTitle" type="text" /><br />
<label >Subject:</label>
<input id="txtSubject" type="text" /><br />
<label >Category: </label>
<input id="txtCategory" type="text" /><br />
<input id="btnAdd" type="submit" value="Add" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:MessagesConnectionString %>"
InsertCommand="INSERT INTO [Messages] ([Title], [Subject], [CategoryID]) VALUES (@Title, @Subject, @CategoryID)"
SelectCommand="SELECT * FROM [Messages]" >
<InsertParameters>
<asp:FormParameter Name="Title" FormField="txtTitle" DefaultValue="No Title" />
<asp:FormParameter Name="Subject" FormField="txtSubject" DefaultValue="No Subject" />
<asp:FormParameter Name="CategoryID" FormField="txtCategory" DefaultValue="No Category" />
</InsertParameters>
</asp:SqlDataSource>
</form>
并且代码背后最好使用
void Page_Load()
{
if (IsPostBack)
SqlDataSource1.Insert();
}
通过禁用此页面的验证,有一种方法可以使代码正常工作,但是您的页面容易受到攻击。
现在我再次看到你的代码,我不确定InsertParametres是否可以获取非服务器控件的值,我认为你还需要将它们更改为ServerControls。