2017-10-15 4 views
0

私はASP.NET(C#)を学習し、このコードに出くわしています:私は疑問に思ってASP.NETでの「@」のこの用法は何を意味

<asp:DropDownList 
    id="ddlMovieCategory" 
    DataSourceID="srcMovieCategories" 
    DataTextField="Name" 
    DataValueField="Id" 
    Runat="server" /> 

<asp:Button 
    id="btnSelect" 
    Text="Select" 
    Runat="server" /> 

<asp:GridView 
    id="grdMovies" 
    DataSourceID="srcMovies" 
    CssClass="gridView" 
    Runat="server" /> 

<asp:SqlDataSource 
    id="srcMovieCategories" 
    SelectCommand="SELECT Id, Name FROM MovieCategories" 
    ConnectionString="<%$ ConnectionStrings:Movies %>" 
    Runat="server" /> 

<asp:SqlDataSource 
    id="srcMovies" 
    SelectCommand="SELECT Title,Director FROM Movies 
     WHERE [email protected]" 
    ConnectionString="<%$ ConnectionStrings:Movies %>" 
    Runat="server"> 
    <SelectParameters> 
    <asp:ControlParameter 
     Name="Id" 
     ControlID="ddlMovieCategory" 
     PropertyName="SelectedValue" /> 
    </SelectParameters> 
</asp:SqlDataSource>  

どのように最後のコントロールのSelectCommandが作業中に@記号。それは期待どおりに動作しますが、@に続く値を取得する方法がわかりません。つまり、ASPタグでエスケープされる変数を使用する場合、IdはDropDownListの現在選択されている項目を参照しています。

編集:解決策を見つけた可能性があります。私はそれがこのコードのビットからだと思う、私は修正アム:

<asp:ControlParameter 
    Name="Id" 
    ControlID="ddlMovieCategory" 
    PropertyName="SelectedValue" /> 
</SelectParameters> 
+0

理解していないビットになったときに、コードの読み込みを停止しましたか? – TZHX

答えて

1

次の文字列

"SELECT Title,Director FROM Movies WHERE [email protected]" 

は、パラメータ化されたSQLクエリを表します。パラメータIDの値@Idは、このクエリが実行される前にCategoryIdに割り当てられます。

SQL injectionsを避けるために、パラメータ化されたクエリが最初に使用されます。

関連する問題