FormParameter无法正常工作

时间:2012-03-10 17:50:32

标签: asp.net webforms

我编写此代码以从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();
}

1 个答案:

答案 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。