2012-03-10 10 views
0

HTMLフィールドからメッセージ情報を取得するためにこのコードを書いてから、insertコマンドを実行します。 InsertCommandは実行されませんでした。ここで何が問題なの?FormParameterが正しく動作しません

<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

なぜASP.NETサーバーコントロールを使用していませんか? –

+0

私は何か新しいことを学んでいます! – dotfreelancer

+0

なぜ-1!あなたの問題は何ですか ? – dotfreelancer

答えて

1

にあなたはFormParameter.aspxを呼び出すフォームを追加しています。これは、手動では手動では機能しません。

したがって、1つのフォームのみを保持し、そこにすべてのコントロールを配置すると、ポストバックが正しく機能します。

<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に変更する必要があると思います。

+0

HTML要素をServerControlsに変更していた場合を除き、メッセージ情報は取得されません!どうして ? – dotfreelancer

+0

@WasimAlatrashこれはSqlDataSourceが動作するためです。 – Aristos

関連する問題