ASP.NET : Displaying an alert from C# code-behind
Asked Answered
S

5

12

I have an asp.net page with a c# code-behind. I am trying to have the code-behind display an 'alert' if the selected-index of a gridview object is changed without selecting 'confirm' or 'cancel'. The code for detecting if confirm or cancel was selected is working, however my message is never displayed. The 'Alert.Show" code was borrowed from: http://archive.devnewz.com/devnewz-3-20061129JavaScriptAlertShowmessagefromASPNETCodebehind.html .

Alert.show works just fine when tested from the page_load(), for example, but not in my selected_index_changed method. Any idea why? Perhaps having to do with how Alert.Show() is implemented?

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>
Sorn answered 24/1, 2012 at 20:52 Comment(5)
What happens when you step through your code? Can you post the entire method?Republic
Maybe the condition is not true at all. Did you try o debug?Duclos
Is the AutoPostBack property of the GridView set to true? It might be that the selected_index_changed event isn't firing.Dendriform
Thanks for the thoughts, I ran the debugger and it is definitely getting into the selected_index_changed method... it even passes over the Alert.Show(), it's just that nothing happens. That's why I'm a bit stuck.. I posted the full code above ^^Sorn
...Ah seems I found another way below--> still odd it wouldn't work this way though...thanks for the help!Sorn
M
25

Description

Assuming i understand your question.

You can use the ScriptManager to show a javascript alert message.

Sample

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);
}

More Information

Meggs answered 24/1, 2012 at 21:4 Comment(1)
Sweet, well I initially thought this wouldn't do it since I wanted the alert displayed only in the specific instance I described, but after thinking a second, changing the index causes a post-back and thus calls the page_load again.. so it works! Thank you. Still..it's odd that what I was using wasn't working.Sorn
U
4
private void MessageBox(string message,string title="title")
{
    ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), title,    "alert('" + message + "');", true);
}

It can be useful: http://www.codeproject.com/Questions/311503/How-to-use-javascript-alert-message-in-code-behind

Upstairs answered 1/5, 2013 at 14:5 Comment(0)
W
2

If you want a single piece of client-side JavaScript to run when the page loads, you can register a startup script in your code-behind:

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 will take care of putting the <script> in your HTML and calling it when the page is loaded.

Webbed answered 24/1, 2012 at 21:3 Comment(0)
L
1

Your asp:ListBox must have AutoPostBack="True" if the selected_index_changed event should be raised by changing index.

for example

    <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>'
Lithe answered 24/1, 2012 at 21:1 Comment(0)
C
0
public static void Alert(string message,Page page)
{
       ScriptManager.RegisterStartupScript(page, page.GetType(),
      "err_msg",
      "alert('" + message + "');",
      true);
}
Centroclinal answered 13/8, 2013 at 12:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.