2012-03-10 4 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를 호출 할 양식을 추가 할 수 있습니다. 이것은 수동으로는 작동하지 않습니다.

양식을 하나만 유지하고 모든 컨트롤을 배치하면 포스트 백이 올바르게 작동합니다.

<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

관련 문제