2012-03-15 3 views
0

В моем приложении я пытаюсь перенаправить на другую страницу после того, как запись вставлена ​​в мой источник данных. Часть вставки работает нормально, но страница никогда не перенаправляется. Есть идеи? Вот мой текущий код:Asp.net, Response.Redirect не работает. Зачем?

ASPX

<asp:FormView ID="FormView1" runat="server" DataKeyNames="RecapID" 
    DataSourceID="RecapDataSource" DefaultMode="Insert"> 
     <InsertItemTemplate> 
      Recap Date: 
      <asp:TextBox ID="RecapDateTextBox" runat="server" 
       Text='<%# Bind("RecapDate") %>' Width="80px" /><asp:RequiredFieldValidator runat="server" id="RequiredFieldValidator1" ControlToValidate="RecapDateTextBox" ErrorMessage="*" display="Dynamic" /> 
      <asp:Button ID="InsertButton" runat="server" CausesValidation="True" 
       CommandName="Insert" Text="Create"/> 
     </InsertItemTemplate> 
     </asp:FormView> 
<asp:SqlDataSource ID="RecapDataSource" runat="server" 
    ConflictDetection="CompareAllValues" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    InsertCommand="INSERT INTO [ftsrms_Recap] ([RecapDate]) VALUES (@RecapDate) SELECT @NewRecapID = SCOPE_IDENTITY()" 
    OldValuesParameterFormatString="original_{0}"> 
    <InsertParameters> 
     <asp:Parameter DbType="Date" Name="RecapDate" /> 
     <asp:Parameter Direction="Output" Name="NewRecapID" Type="Int32" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

ASPX.VB

Protected Sub RecapDataSource_Inserted(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) 

    'Read the value of the @NewProductID OUTPUT parameter 
    Dim newRecapID As Integer = Convert.ToInt32(e.Command.Parameters("@NewRecapID").Value) 

    Response.Redirect("Profile.aspx?") 

End Sub 
+0

Вы уверены, что RecapDataSource_Inserted обрабатывает событие Inserted? –

+0

Вы можете установить точку останова на этой линии и посмотреть, действительно ли она попала в нее. Если нет, проблема в другом месте. – Koen

ответ

0

Вам нужно добавить обработчик событий RecapDataSource:

oninserted =» RecapDataSour ce_Inserted»

Так что ваш код ASPX становится:

<asp:FormView ID="FormView1" runat="server" DataKeyNames="RecapID" 
    DataSourceID="RecapDataSource" DefaultMode="Insert"> 
     <InsertItemTemplate> 
      Recap Date: 
      <asp:TextBox ID="RecapDateTextBox" runat="server" 
       Text='<%# Bind("RecapDate") %>' Width="80px" /><asp:RequiredFieldValidator runat="server" id="RequiredFieldValidator1" ControlToValidate="RecapDateTextBox" ErrorMessage="*" display="Dynamic" /> 
      <asp:Button ID="InsertButton" runat="server" CausesValidation="True" 
       CommandName="Insert" Text="Create"/> 
     </InsertItemTemplate> 
     </asp:FormView> 
<asp:SqlDataSource ID="RecapDataSource" runat="server" 
    oninserted="RecapDataSource_Inserted" 
    ConflictDetection="CompareAllValues" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    InsertCommand="INSERT INTO [ftsrms_Recap] ([RecapDate]) VALUES (@RecapDate) SELECT @NewRecapID = SCOPE_IDENTITY()" 
    OldValuesParameterFormatString="original_{0}"> 
    <InsertParameters> 
     <asp:Parameter DbType="Date" Name="RecapDate" /> 
     <asp:Parameter Direction="Output" Name="NewRecapID" Type="Int32" /> 
    </InsertParameters> 
</asp:SqlDataSource> 

Edit:

Изменение Кроме этого:

Protected Sub RecapDataSource_Inserted(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) 

    'Read the value of the @NewProductID OUTPUT parameter 
    Dim newRecapID As Integer = Convert.ToInt32(e.Command.Parameters("@NewRecapID").Value) 

    Response.Redirect("Profile.aspx?") 

End Sub 

к этому:

Protected Sub RecapDataSource_Inserted(sender As Object, e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) 

    'Read the value of the @NewProductID OUTPUT parameter 
    Dim newRecapID As Integer = Convert.ToInt32(e.Command.Parameters("@NewRecapID").Value) 

    Response.Redirect("Profile.aspx?") 

End Sub 

Если он все еще не работает, удалите эту строку (или комментарий) и попытайтесь снова:

Dim newRecapID As Integer = Convert.ToInt32(e.Command.Parameters("@NewRecapID").Value) 

Может быть он поднимается исключение.

+0

Пробовал ваше предложение Vano, но отладчик бросил следующую ошибку: Ошибка Метод 'Защищенный Sub RecapDataSource_Inserted (отправитель как объект, e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs)' не имеет подписи, совместимой с делегатом ' Делегировать Sub SqlDataSourceStatusEventHandler (отправитель как объект, e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) '. – sevenyearsrust

+0

Ничего из вышеперечисленного не работает, даже комментируя строку: Dim newRecapID As Integer = Convert.ToInt32 (e.Command.Parameters ("@ NewRecapID"). Значение). – sevenyearsrust

+0

Исчерпайте выше, я сохранил и перекомпилировал с oninserted = «RecapDataSource_Inserted» в ASPX, используя код, расположенный с System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs, и он сработал. Огромное спасибо! – sevenyearsrust

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