0

最初のページのラジオ ボタンで並べ替えられた 2 番目のページに SQL データベースのテーブルを表示する HTML ページに取り組んできました。ここでの私の好みの言語は C# で、その 2 番目のページを正しく構築できないようです。現在、LINQ と組み合わせて IF ステートメントを使用しようとしていますが、機能していません。続行する方法について誰かが私にアドバイスできますか? ちなみに私は全くの素人です。
HTML コード:

     <body>
    <h1>Server Request Form</h1>
    <form id="sortradio" action="searchresults.aspx" method="get">
        <fieldset>
            <legend>Sort Order</legend>
            <input type="radio" id="titledesc" name="sortorder" value="Title Desc" />
            <label for="titledesc">By Title - Descending</label>
            <input type="radio" id="titleasc" name="sortorder" value="Title" />
            <label for="titleasc">By Title - Ascending</label>
            <input type="radio" id="iddesc" name="sortorder" value="Id Desc" />
            <label for="iddesc">By ID - Descending</label>
            <input type="radio" id="idasc" name="sortorder" value="Id" />
            <label for="idasc">By ID - Ascending</label>
            <input type="submit" value="Get Info" />
        </fieldset>
   </form>
</body>


Aspx コード:

<h1>You are sorting by <% Response.Write(Request.QueryString("sortorder"))%>.</h1>
<% 
    Dim SortingOrder = Request.QueryString("sortorder")
%>
<form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="SqlDataSource1" EmptyDataText="There are no data records to display.">
        <Columns>
            <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
            <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
            <asp:BoundField DataField="Summary" HeaderText="Summary" SortExpression="Summary" />
            <asp:BoundField DataField="Body" HeaderText="Body" SortExpression="Body" />
            <asp:BoundField DataField="GenreId" HeaderText="GenreId" SortExpression="GenreId" />
            <asp:CheckBoxField DataField="Authorized" HeaderText="Authorized" SortExpression="Authorized" />
            <asp:BoundField DataField="CreateDateTime" HeaderText="CreateDateTime" SortExpression="CreateDateTime" />
            <asp:BoundField DataField="UpdateDateTime" HeaderText="UpdateDateTime" SortExpression="UpdateDateTime" />
        </Columns>
    </asp:GridView>
    <asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:Database1.MDFConnectionString1 %>" providername="<%$ ConnectionStrings:Database1.MDFConnectionString1.ProviderName %>" selectcommand="SELECT [Id], [Title], [Summary], [Body], [GenreId], [Authorized], [CreateDateTime], [UpdateDateTime] FROM [Review] ORDER BY @sortorder">
        <Selectparameters>
      <asp:querystringparameter name="sortorder" querystringfield="sortorder" />
        </Selectparameters>
    </asp:SqlDataSource>
    </form>`
4

1 に答える 1

0

ORDER BY 句でパラメーターを使用するべきではないと確信しています。

私だったら、ObjectDataSourceを実装し、サーバー側のハードコーディングされた代替手段を使用して動的に ORDER BY 句を作成します。そのルートをたどる場合は、ALWAYS USE PARAMETERS FOR USER-SUBMITTED DATA TO SECURE YOURSELF AGAINST SQL INJECTION ATTACKSを確認してください。

ObjectDataSource クラスに取り組む準備ができていない場合は、並べ替えオプションごとに異なる SQLDataSource を実装することを検討してください。それぞれが異なる ORDER BY 句を実装します。

クエリ パラメータの値に基づいて DataSourceID を設定します。

それがそのまま機能するかどうかはわかりません。GridView の DataSource を明示的に設定する必要がある場合があります。その場合は、Databind() も明示的に呼び出すことを忘れないでください。

于 2013-07-25T04:51:20.230 に答える