FormParameter не работает правильно - PullRequest
0 голосов
/ 10 марта 2012

Я написал этот код для получения информации о сообщениях из полей HTML, а затем выполнил команду вставки.но 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 Ответ

1 голос
/ 10 марта 2012

Вы добавили форму, которая вызывает 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...