2013-07-17 2 views
0

Я пытаюсь получить страницу aspx для изменения порядка запроса sql, в зависимости от формы другой html-страницы. Он продолжает давать мне сообщение об ошибке Parser: тег сервера плохо сформирован. Как я могу исправить код ниже?Тег сервера не очень хорошо сформирован - SQL Query

<% 
    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:PLANETWROX.MDFConnectionString1 %>" deletecommand="DELETE FROM [Review] WHERE [Id] = @Id" insertcommand="INSERT INTO [Review] ([Title], [Summary], [Body], [GenreId], [Authorized], [CreateDateTime], [UpdateDateTime]) VALUES (@Title, @Summary, @Body, @GenreId, @Authorized, @CreateDateTime, @UpdateDateTime)" providername="<%$ ConnectionStrings:PLANETWROX.MDFConnectionString1.ProviderName %>" selectcommand="SELECT [Id], [Title], [Summary], [Body], [GenreId], [Authorized], [CreateDateTime], [UpdateDateTime] FROM [Review] ORDER BY Request.QueryString("sortorder")" updatecommand="UPDATE [Review] SET [Title] = @Title, [Summary] = @Summary, [Body] = @Body, [GenreId] = @GenreId, [Authorized] = @Authorized, [CreateDateTime] = @CreateDateTime, [UpdateDateTime] = @UpdateDateTime WHERE [Id] = @Id"> 
     <DeleteParameters> 
      <asp:Parameter Name="Id" Type="Int32" /> 
     </DeleteParameters> 
     <InsertParameters> 
      <asp:Parameter Name="Title" Type="String" /> 
      <asp:Parameter Name="Summary" Type="String" /> 
      <asp:Parameter Name="Body" Type="String" /> 
      <asp:Parameter Name="GenreId" Type="Int32" /> 
      <asp:Parameter Name="Authorized" Type="Boolean" /> 
      <asp:Parameter Name="CreateDateTime" Type="DateTime" /> 
      <asp:Parameter Name="UpdateDateTime" Type="DateTime" /> 
     </InsertParameters> 
     <UpdateParameters> 
      <asp:Parameter Name="Title" Type="String" /> 
      <asp:Parameter Name="Summary" Type="String" /> 
      <asp:Parameter Name="Body" Type="String" /> 
      <asp:Parameter Name="GenreId" Type="Int32" /> 
      <asp:Parameter Name="Authorized" Type="Boolean" /> 
      <asp:Parameter Name="CreateDateTime" Type="DateTime" /> 
      <asp:Parameter Name="UpdateDateTime" Type="DateTime" /> 
      <asp:Parameter Name="Id" Type="Int32" /> 
     </UpdateParameters> 
    </asp:SqlDataSource> 
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
     ShowSelectButton="True" ButtonType="Button"></asp:CommandField> 
    <asp:Database.Query(Select * From Review [Order By<% Response.Write(Request.QueryString("sortorder"))%>])></asp:Database.Query> 
    </form> 

ответ

3

Ваша проблема здесь:

selectcommand="SELECT [Id], [Title], [Summary], [Body], [GenreId], [Authorized], [CreateDateTime], [UpdateDateTime] FROM [Review] ORDER BY Request.QueryString("sortorder")" 

двойные кавычки в Request.QueryString("sortorder")" закрываем тег преждевременно. И вы не можете напрямую использовать строку запроса.

Должно быть что-то вроде этого:

SelectCommand="Select EmployeeID, LastName From Employees where EmployeeID = @empId"> 
    <SelectParameters> 
     <asp:QueryStringParameter  Name="empId" QueryStringField="empId" /> 
    </SelectParameters> 

Взятые с этой страницы:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.querystringparameter.querystringfield.aspx

+0

Ну, это решило проблему с тегом сервера. Только теперь у меня есть ошибка под названием «Элемент SELECT, идентифицированный ORDER BY номером 1, содержит переменную как часть выражения, идентифицирующего позицию столбца. Переменные допускаются только при заказе с помощью выражения, ссылающегося на имя столбца». – GPinskiy

0
<% should be <%= in order by 

Разъяснения уже здесь: script tags in html

и удалить Response.Write от заявление.

+0

<% = и <% Response.Write эквивалентны. <% = - это ярлык для Response.Write. – nickles80

Смежные вопросы