ASP.NET: отображение предупреждения из кода С#

У меня есть страница asp.net с кодом С#. Я пытаюсь, чтобы отображаемый код отображал "предупреждение", если выбранный индекс объекта gridview изменен без выбора "подтвердить" или "отменить". Был выбран код для обнаружения подтверждения или отмены, однако мое сообщение никогда не отображается. Код "Alert.Show" был заимствован из: http://archive.devnewz.com/devnewz-3-20061129JavaScriptAlertShowmessagefromASPNETCodebehind.html.

Alert.show работает отлично, когда тестируется с page_load(), например, но не в моем методе selected_index_changed. Любая идея почему? Возможно, связано с тем, как реализована функция Alert.Show()?

if (ChangeAttemptedId && !IsSavedId)
{
 Alert.Show("Dispatch assignment saved, but you forgot to click Confirm or Cancel!)");
}

ASP.NET CODE:

<asp:Table ID="Table1" runat="server" CssClass="DefaultTable">
    <asp:TableRow runat="server">
        <asp:TableCell runat="server" Width="50%" VerticalAlign="Top" HorizontalAlign="Left">
            <asp:UpdatePanel ID="detailsUP" runat="server" UpdateMode="Always" ChildrenAsTriggers="True">
                <ContentTemplate>
                    <!--
                    <asp:Label ID="label1" runat="server" Text="Car To Dispatch: " CssClass="DefaultLabel"></asp:Label>
                    <asp:DropDownList ID="CarsDDL" runat="server" DataSourceID="VehiclesEDS" DataMember="CarNum" DataTextField="CarNum" AppendDataBoundItems="True" Font-Bold="True">
                        <asp:ListItem Selected="True" Text="-"></asp:ListItem>
                    </asp:DropDownList>
                    -->
                    <asp:DetailsView ID="RideToAssignDV" runat="server" Height="400px" 
                        Width="400px" AutoGenerateRows="False" 
                        BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
                        CellPadding="3" GridLines="Vertical">
                        <AlternatingRowStyle BackColor="#DCDCDC" />
                        <EditRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
                        <Fields>
                            <asp:BoundField DataField="AssignedCar" HeaderText="Car" 
                                SortExpression="AssignedCar" NullDisplayText="---" />            
                            <asp:BoundField DataField="Name" HeaderText="Name" 
                                SortExpression="Name" NullDisplayText="---" />
                            <asp:BoundField DataField="Phone" HeaderText="Phone" 
                                SortExpression="Phone" NullDisplayText="---" />
                            <asp:BoundField DataField="NumPatrons" HeaderText="Size" 
                                SortExpression="NumPatrons" NullDisplayText="---" />                
                            <asp:BoundField DataField="PickupAddress" HeaderText="Pickup Address" 
                                SortExpression="PickupAddress" NullDisplayText="---" />
                            <asp:BoundField DataField="DropoffAddress" HeaderText="Drop-Off Address" 
                                SortExpression="DropoffAddress" NullDisplayText="---" />
                            <asp:BoundField DataField="CreatedBy" HeaderText="Created By" 
                                SortExpression="CreatedBy" NullDisplayText="---" />
                            <asp:BoundField DataField="TimeOfCall" HeaderText="Call Time" 
                                SortExpression="TimeOfCall" ReadOnly="True" NullDisplayText="---" />
                        </Fields>
                        <FooterStyle BackColor="#CCCCCC" ForeColor="Black" BorderStyle="Inset" BorderColor="#C6940D" HorizontalAlign="Center" Height="25px" />
                        <FooterTemplate>
                            <asp:Button ID="confirmButton" runat="server" Text="Confirm" ForeColor="Green" HorizontalAlign="Center" OnClick="confirmButton_Click"/>
                            <asp:Button ID="cancelButton" runat="server" Text="Cancel" ForeColor="Red" HorizontalAlign="Center" 
                                OnClick="cancelButton_Click" OnClientClick="displayTopTen();" />
                        </FooterTemplate>
                        <HeaderStyle BackColor="#004812" Font-Bold="True" />
                        <PagerStyle BackColor="#999999" ForeColor="Black" />
                        <RowStyle BackColor="#EEEEEE" ForeColor="Black" />                            
                    </asp:DetailsView>
                </ContentTemplate>
            </asp:UpdatePanel>
        </asp:TableCell>

        <asp:TableCell runat="server" Width="50%">
            <asp:UpdatePanel ID="mapUP" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <div id="map_canvas" style="height: 400px; width:400px;"></div>
                </ContentTemplate>
            </asp:UpdatePanel>
        </asp:TableCell>
    </asp:TableRow>
</asp:Table>

<br />
<asp:Label ID="GV_Label1" runat="server" Text="Car To Dispatch: " CssClass="DefaultLabel"></asp:Label>

<asp:UpdatePanel ID="SelectCarUP" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:GridView ID="VehiclesGridView" runat="server" AllowPaging="True" 
            AllowSorting="True" DataSourceID="VehiclesEDS" AutoGenerateColumns="False" 
            onselectedindexchanged="VehiclesGridView_SelectedIndexChanged" 
            BackColor="White" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" 
            CellPadding="3" GridLines="Vertical" ShowHeaderWhenEmpty="True" AutoPostBack="True">
            <AlternatingRowStyle BackColor="#DCDCDC" />
            <Columns>
                <asp:TemplateField ShowHeader="False">
                    <ItemTemplate>
                        <asp:LinkButton ID="GVSelectButton" runat="server" CausesValidation="False" 
                            CommandName="Select" Text="Select"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="CarNum" HeaderText="Car" ReadOnly="True" 
                    SortExpression="CarNum" />
                <asp:BoundField DataField="CurrPassengers" HeaderText="Passengers" 
                    ReadOnly="True" SortExpression="CurrPassengers" />
                <asp:BoundField DataField="MaxPassengers" HeaderText="Capacity" ReadOnly="True" 
                    SortExpression="MaxPassengers" />
                <asp:BoundField DataField="Status" HeaderText="Status" ReadOnly="True" 
                    SortExpression="Status" />
                <asp:BoundField DataField="StartAdd" HeaderText="Pick-Up Address" 
                    ReadOnly="True" SortExpression="StartAdd" />
                <asp:BoundField DataField="EndAdd" HeaderText="Drop-Off Address" 
                    ReadOnly="True" SortExpression="EndAdd" />
                <asp:BoundField DataField="AvgRideTime" HeaderText="Avg. Ride Time" 
                    ReadOnly="True" SortExpression="AvgRideTime" />
            </Columns>
            <FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
            <HeaderStyle BackColor="#004812" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <RowStyle BackColor="#EEEEEE" ForeColor="Black" />
            <SelectedRowStyle BackColor="#C6940D" Font-Bold="True" ForeColor="White" />
            <SortedAscendingCellStyle BackColor="#F1F1F1" />
            <SortedAscendingHeaderStyle BackColor="#C6940D" />
            <SortedDescendingCellStyle BackColor="#CAC9C9" />
            <SortedDescendingHeaderStyle BackColor="#9F770B" />
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

Ответ 1

Описание

Предполагая, что я понимаю ваш вопрос.

Вы можете использовать ScriptManager для отображения предупреждающего сообщения javascript.

Пример

protected void Page_Load(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), 
          "err_msg", 
          "alert('Dispatch assignment saved, but you forgot to click Confirm or Cancel!)');",
          true);
}

Дополнительная информация

Ответ 3

Если вы хотите, чтобы один экземпляр клиентского JavaScript выполнялся при загрузке страницы, вы можете зарегистрировать запуск script в коде:

if(!ClientScript. IsStartupScriptRegistered(typeof(Page), "alert"))
  string script = "<script>";
  script += "alert('";
  script += "Dispatch assignment saved, but you forgot to click Confirm or Cancel!";
  script += "');";
  script += "</script>";
  ClientScript.RegisterStartupScript(typeof(Page), "alert", script); 
}

ASP.NET позаботится о размещении <script> в вашем HTML и вызове его при загрузке страницы.

Ответ 4

Ваш asp:ListBox должен иметь AutoPostBack="True", если событие selected_index_changed должно быть поднято путем изменения индекса.

например

    <asp:ListBox ID="ListBox1" runat="server" 
        AutoPostBack="True" OnSelectedIndexChanged="selected_index_changed">
        <asp:ListItem>one</asp:ListItem>
        <asp:ListItem>two</asp:ListItem>
        <asp:ListItem>three</asp:ListItem>
    </asp:ListBox>'

Ответ 5

public static void Alert(string message,Page page)
{
       ScriptManager.RegisterStartupScript(page, page.GetType(),
      "err_msg",
      "alert('" + message + "');",
      true);
}