2012-03-10 54 views
0

我編寫了此代碼以從HTML字段中獲取消息信息,然後執行插入命令。但是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服務器控件? – 2012-03-10 17:53:33

+0

我正在學習新東西! – dotfreelancer 2012-03-10 17:55:00

+0

爲什麼-1!你怎麼了 ? – dotfreelancer 2012-03-10 19:36:06

回答

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。

+0

除了當我將HTML元素更改爲ServerControl時,不會採用消息信息!爲什麼? – dotfreelancer 2012-03-10 19:34:33

+0

@WasimAlatrash,因爲這是SqlDataSource的工作方式。 – Aristos 2012-03-10 21:22:46